int
__fastcall uf_client_call(_DWORD
*
a1,
int
a2,
int
*
a3)
{
......
v5
=
json_object_new_object();
......
switch (
*
a1 )
/
/
这里的
*
a1指的就是uf_call.client_call函数的第一个参数ctype,他取决于method它在dev_sta.lua文件中被赋值为了
2
{
case
0
:
v15
=
((
int
(
*
)(void))strlen)()
+
10
;
......
v13
=
"acConfig.%s"
;
goto LABEL_22;
case
1
:
v14
=
((
int
(
*
)(void))strlen)()
+
11
;
......
v13
=
"devConfig.%s"
;
goto LABEL_22;
case
2
:
v8
=
((
int
(
*
)(void))strlen)()
+
8
;
......
v13
=
"devSta.%s"
;
goto LABEL_22;
case
3
:
v16
=
((
int
(
*
)(void))strlen)()
+
8
;
......
v13
=
"devCap.%s"
;
goto LABEL_22;
case
4
:
v17
=
((
int
(
*
)(void))strlen)()
+
7
;
......
LABEL_22:
/
/
接下来使用了大量的json_object_object_add函数,该函数的作用是在已有的JSON对象中添加一个键值对,以json_object_object_add(v20,
"remoteIp"
, v23)函数为例,作用是将{
"remote"
,v23}这个键值对添加到v20所指的JSON对象中,
json_object_object_add(v5,
"method"
, v19);
v20
=
json_object_new_object();
......
v21
=
json_object_new_string(a1[
2
]);
json_object_object_add(v20,
"module"
, v21);
v22
=
a1[
5
];
if
( !v22 )
goto LABEL_35;
json_object_object_add(v20,
"remoteIp"
, v23);
LABEL_35:
v25
=
a1[
6
];
if
( v25 )
{
v26
=
json_object_new_string(v25);
......
json_object_object_add(v20,
"remotePwd"
, v26);
}
if
( a1[
9
] )
{
......
json_object_object_add(v20,
"buf"
, v27);
}
if
(
*
a1 )
{
if
(
*
a1 !
=
2
)
{
v28
=
*
((unsigned __int8
*
)a1
+
45
);
goto LABEL_58;
}
if
(
*
((_BYTE
*
)a1
+
42
) )
{
v30
=
json_object_new_boolean(
1
);
if
( v30 )
{
v31
=
v20;
v32
=
"execute"
;
goto LABEL_56;
}
}
}
else
{
if
(
*
((_BYTE
*
)a1
+
43
) )
{
v29
=
json_object_new_boolean(
1
);
if
( v29 )
json_object_object_add(v20,
"force"
, v29);
}
if
(
*
((_BYTE
*
)a1
+
44
) )
{
v30
=
json_object_new_boolean(
1
);
if
( v30 )
{
v31
=
v20;
v32
=
"configId_not_change"
;
LABEL_56:
json_object_object_add(v31, v32, v30);
goto LABEL_57;
}
}
}
LABEL_57:
v28
=
*
((unsigned __int8
*
)a1
+
45
);
LABEL_58:
if
( v28 )
{
v33
=
json_object_new_boolean(
1
);
if
( v33 )
json_object_object_add(v20,
"from_url"
, v33);
}
if
(
*
((_BYTE
*
)a1
+
47
) )
{
v34
=
json_object_new_boolean(
1
);
if
( v34 )
json_object_object_add(v20,
"from_file"
, v34);
}
if
(
*
((_BYTE
*
)a1
+
48
) )
{
v35
=
json_object_new_boolean(
1
);
if
( v35 )
json_object_object_add(v20,
"multi"
, v35);
}
if
(
*
((_BYTE
*
)a1
+
46
) )
{
v36
=
json_object_new_boolean(
1
);
if
( v36 )
json_object_object_add(v20,
"not_commit"
, v36);
}
if
(
*
((_BYTE
*
)a1
+
40
) )
{
v37
=
json_object_new_boolean(
*
((unsigned __int8
*
)a1
+
41
) ^
1
);
if
( v37 )
json_object_object_add(v20,
"async"
, v37);
}
v38
=
(_BYTE
*
)a1[
3
];
if
( !v38 || !
*
v38 )
goto LABEL_78;
v39
=
json_object_new_string(v38);
json_object_object_add(v20,
"data"
, v39);
LABEL_78:
v41
=
(_BYTE
*
)a1[
4
];
if
( v41 &&
*
v41 )
{
v42
=
json_object_new_string(v41);
if
( !v42 )
{
json_object_put(v20);
json_object_put(v5);
v40
=
630
;
goto LABEL_82;
}
json_object_object_add(v20,
"device"
, v42);
}
json_object_object_add(v5,
"params"
, v20);
/
/
将上面的v20当做了params的值,向v5中添加新的键值对
v43
=
json_object_to_json_string(v5);
/
/
json_object_to_json_string作用是将JSON对象转换为JSON格式的字符串
......
v44
=
uf_socket_client_init(
0
);
......
v50
=
strlen(v43);
uf_socket_msg_write(v44, v43, v50);
/
/
最终调用uf_socket_msg_write,用socket实现了进程间通信,将解析好的json数据发送给其他进程进行处理
......