|
|
| version 1.4.2.11, 2011/09/07 00:30:04 | version 1.5.2.3, 2011/09/07 09:22:15 |
|---|---|
| Line 60 rpc_srv_dispatchCall(void *arg) | Line 60 rpc_srv_dispatchCall(void *arg) |
| u_char *buf; | u_char *buf; |
| int ret, argc = 0, Limit = 0; | int ret, argc = 0, Limit = 0; |
| register int i; | register int i; |
| uint16_t tag = 0; | |
| uint32_t hash = 0; | |
| if (!arg) { | if (!arg) { |
| rpc_SetErr(EINVAL, "Error:: Invalid parameter can`t procced RPC client ...\n"); | rpc_SetErr(EINVAL, "Error:: Invalid parameter can`t procced RPC client ...\n"); |
| Line 103 rpc_srv_dispatchCall(void *arg) | Line 105 rpc_srv_dispatchCall(void *arg) |
| } else | } else |
| rpc = (struct tagRPCCall*) buf; | rpc = (struct tagRPCCall*) buf; |
| /* check RPC packet session info */ | /* check RPC packet session info */ |
| if (memcmp(&rpc->call_session, &s->srv_session, sizeof rpc->call_session)) { | if (rpc_chkPktSession(&rpc->call_session, &s->srv_session)) { |
| rpc_SetErr(ERPCMISMATCH, "Error:: get invalid RPC session ...\n"); | rpc_SetErr(ERPCMISMATCH, "Error:: get invalid RPC session ...\n"); |
| ret = -5; | ret = -5; |
| goto makeReply; | goto makeReply; |
| } else | } else |
| Limit = sizeof(struct tagRPCCall); | Limit = sizeof(struct tagRPCCall); |
| tag = rpc->call_tag; | |
| hash = rpc->call_hash; | |
| /* RPC is OK! Go decapsulate variables ... */ | /* RPC is OK! Go decapsulate variables ... */ |
| if (rpc->call_argc) { | if (ntohs(rpc->call_argc)) { |
| arr = io_buffer2vals(buf + Limit, s->srv_netbuf - Limit, rpc->call_argc, 1); | arr = io_buffer2vals(buf + Limit, s->srv_netbuf - Limit, |
| ntohs(rpc->call_argc), 1); | |
| if (!arr) { | if (!arr) { |
| ret = -5; | ret = -5; |
| goto makeReply; | goto makeReply; |
| } | } |
| } | } else |
| arr = NULL; | |
| /* execute call */ | /* execute call */ |
| argc = 0; | argc = 0; |
| memcpy(&ses, &rpc->call_session, sizeof ses); | memcpy(&ses, &rpc->call_session, sizeof ses); |
| if (!(f = rpc_srv_getCall(s, rpc->call_tag, rpc->call_hash))) { | if (!(f = rpc_srv_getCall(s, ntohs(tag), ntohl(hash)))) { |
| rpc_SetErr(EPROGUNAVAIL, "Error:: call not found into RPC server ...\n"); | rpc_SetErr(EPROGUNAVAIL, "Error:: call not found into RPC server ...\n"); |
| ret = -6; | ret = -6; |
| } else | } else |
| Line 145 makeReply: | Line 152 makeReply: |
| Limit = sizeof(struct tagRPCRet); | Limit = sizeof(struct tagRPCRet); |
| memcpy(&rrpc->ret_session, &ses, sizeof(rpc_sess_t)); | memcpy(&rrpc->ret_session, &ses, sizeof(rpc_sess_t)); |
| rrpc->ret_tag = rpc->call_tag; | rrpc->ret_tag = tag; |
| rrpc->ret_hash = rpc->call_hash; | rrpc->ret_hash = hash; |
| rrpc->ret_errno = rpc_Errno; | rrpc->ret_errno = htonl(rpc_Errno); |
| rrpc->ret_retcode = ret; | rrpc->ret_retcode = htonl(ret); |
| rrpc->ret_argc = argc; | rrpc->ret_argc = htons(argc); |
| if (argc && arr) { | if (argc && arr) { |
| /* Go Encapsulate variables ... */ | /* Go Encapsulate variables ... */ |
| Line 826 rpc_srv_execCall(rpc_func_t * __restrict call, struct | Line 833 rpc_srv_execCall(rpc_func_t * __restrict call, struct |
| func = dlsym(dl, (char*) call->func_name); | func = dlsym(dl, (char*) call->func_name); |
| if (func) | if (func) |
| ret = func(call, rpc->call_argc, args); | ret = func(call, ntohs(rpc->call_argc), args); |
| else { | else { |
| rpc_SetErr(ENOEXEC, "Error:: Can`t find function %s!\n", dlerror()); | rpc_SetErr(ENOEXEC, "Error:: Can`t find function %s!\n", dlerror()); |
| ret = -1; | ret = -1; |