|
|
| version 1.4.2.9, 2011/09/03 12:58:49 | version 1.5.2.2, 2011/09/07 09:10:55 |
|---|---|
| Line 103 rpc_srv_dispatchCall(void *arg) | Line 103 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; |
| Line 111 rpc_srv_dispatchCall(void *arg) | Line 111 rpc_srv_dispatchCall(void *arg) |
| Limit = sizeof(struct tagRPCCall); | Limit = sizeof(struct tagRPCCall); |
| /* 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(rpc->call_tag), ntohl(rpc->call_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 147 makeReply: | Line 149 makeReply: |
| 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 = rpc->call_tag; |
| rrpc->ret_hash = rpc->call_hash; | rrpc->ret_hash = rpc->call_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 448 rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv) | Line 450 rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv) |
| shutdown(c->cli_sock, SHUT_RDWR); | shutdown(c->cli_sock, SHUT_RDWR); |
| close(srv->srv_blob.server.cli_sock); | close(srv->srv_blob.server.cli_sock); |
| pthread_mutex_lock(&srv->srv_blob.mtx); | |
| if (srv->srv_blob.clients) { | if (srv->srv_blob.clients) { |
| free(srv->srv_blob.clients); | free(srv->srv_blob.clients); |
| srv->srv_blob.clients = NULL; | srv->srv_blob.clients = NULL; |
| } | } |
| /* detach blobs */ | /* detach blobs */ |
| pthread_mutex_lock(&srv->srv_blob.mtx); | |
| while ((f = srv->srv_blob.blobs)) { | while ((f = srv->srv_blob.blobs)) { |
| srv->srv_blob.blobs = f->blob_next; | srv->srv_blob.blobs = f->blob_next; |
| rpc_srv_blobFree(srv, f); | rpc_srv_blobFree(srv, f); |
| Line 496 rpc_srv_loopBLOB(rpc_srv_t * __restrict srv) | Line 498 rpc_srv_loopBLOB(rpc_srv_t * __restrict srv) |
| if (!c->cli_sa.sa_family) | if (!c->cli_sa.sa_family) |
| break; | break; |
| if (i >= srv->srv_numcli) { | if (i >= srv->srv_numcli) { |
| usleep(1000000); | |
| #ifdef HAVE_PTHREAD_YIELD | #ifdef HAVE_PTHREAD_YIELD |
| pthread_yield(); | pthread_yield(); |
| #else | |
| usleep(1000000); | |
| #endif | #endif |
| continue; | continue; |
| } | } |
| Line 528 rpc_srv_loopBLOB(rpc_srv_t * __restrict srv) | Line 531 rpc_srv_loopBLOB(rpc_srv_t * __restrict srv) |
| pthread_detach(c->cli_tid); | pthread_detach(c->cli_tid); |
| } | } |
| srv->srv_blob.state = disable; | srv->srv_blob.state = kill; |
| return 0; | return 0; |
| } | } |
| Line 759 rpc_srv_loopServer(rpc_srv_t * __restrict srv) | Line 762 rpc_srv_loopServer(rpc_srv_t * __restrict srv) |
| if (!c->cli_sa.sa_family) | if (!c->cli_sa.sa_family) |
| break; | break; |
| if (i >= srv->srv_numcli) { | if (i >= srv->srv_numcli) { |
| usleep(1000000); | |
| #ifdef HAVE_PTHREAD_YIELD | #ifdef HAVE_PTHREAD_YIELD |
| pthread_yield(); | pthread_yield(); |
| #else | |
| usleep(1000000); | |
| #endif | #endif |
| continue; | continue; |
| } | } |
| Line 824 rpc_srv_execCall(rpc_func_t * __restrict call, struct | Line 828 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; |