|
|
| version 1.26.2.9, 2015/06/29 22:39:33 | version 1.27, 2015/07/02 22:28:15 |
|---|---|
| Line 82 static sched_task_func_t cbProto[SOCK_MAX_SUPPORT][4] | Line 82 static sched_task_func_t cbProto[SOCK_MAX_SUPPORT][4] |
| static volatile uintptr_t _glSigArg = 0; | static volatile uintptr_t _glSigArg = 0; |
| void | void |
| rpc_freeCli(rpc_cli_t * __restrict c) | rpc_freeCli(rpc_cli_t * __restrict c) |
| { | { |
| Line 197 txPacket(sched_task_t *task) | Line 196 txPacket(sched_task_t *task) |
| rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server"); | rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) { | } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) { |
| rpc_SetErr(EMSGSIZE, "Message too long"); | rpc_SetErr(EMSGSIZE, "Message too long"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else { | } else { |
| rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c)); | rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c)); |
| /* Go Encapsulate variables */ | /* Go Encapsulate variables */ |
| Line 214 txPacket(sched_task_t *task) | Line 213 txPacket(sched_task_t *task) |
| rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); | rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else | } else |
| wlen += ret; | wlen += ret; |
| } | } |
| Line 263 execCall(sched_task_t *task) | Line 262 execCall(sched_task_t *task) |
| rpc_SetErr(ERPCMISMATCH, "#%d - %s", elwix_GetErrno(), elwix_GetError()); | rpc_SetErr(ERPCMISMATCH, "#%d - %s", elwix_GetErrno(), elwix_GetError()); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| taskExit(task, NULL); | taskExit(task, NULL); |
| } | } |
| } else | } else |
| Line 274 execCall(sched_task_t *task) | Line 273 execCall(sched_task_t *task) |
| rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server"); | rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else { | } else { |
| /* if client doesn't want reply */ | /* if client doesn't want reply */ |
| rpc->call_rep.ret = RPC_ERROR(rpc_srv_execCall(c, rpc, f->func_name, arr)); | RPC_SET_RETURN(rpc, rpc_srv_execCall(c, rpc, f->func_name, arr)); |
| if (rpc->call_rep.ret == htonl(-1)) { | if (rpc->call_rep.ret == htonl(-1)) { |
| if (!rpc->call_rep.eno) { | if (!rpc->call_rep.eno) { |
| LOGERR; | LOGERR; |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } | } |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| ait_freeVars(&c->cli_vars); | ait_freeVars(&c->cli_vars); |
| Line 313 rxPacket(sched_task_t *task) | Line 312 rxPacket(sched_task_t *task) |
| u_short crc; | u_short crc; |
| #endif | #endif |
| u_char *buf = AIT_GET_BUF(&c->cli_buf); | u_char *buf = AIT_GET_BUF(&c->cli_buf); |
| u_char b[sizeof(struct tagRPCCall)]; | |
| struct tagRPCCall *rpc = (struct tagRPCCall*) buf; | struct tagRPCCall *rpc = (struct tagRPCCall*) buf; |
| #ifdef TCP_SESSION_TIMEOUT | #ifdef TCP_SESSION_TIMEOUT |
| struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; | struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; |
| Line 322 rxPacket(sched_task_t *task) | Line 322 rxPacket(sched_task_t *task) |
| TASK_ARG(task), ts, TASK_ARG(task), 0); | TASK_ARG(task), ts, TASK_ARG(task), 0); |
| #endif | #endif |
| /* prepare rx */ | |
| len = recv(TASK_FD(task), b, sizeof b, MSG_PEEK); | |
| if (len == sizeof b) | |
| rlen = ntohl(((struct tagRPCCall*) b)->call_len); | |
| rlen = recv(TASK_FD(task), buf, rlen, 0); | rlen = recv(TASK_FD(task), buf, rlen, 0); |
| if (rlen == -1) { | if (rlen == -1) { |
| /* close connection */ | /* close connection */ |
| Line 333 rxPacket(sched_task_t *task) | Line 338 rxPacket(sched_task_t *task) |
| rpc_SetErr(ERPCMISMATCH, "Short RPC packet"); | rpc_SetErr(ERPCMISMATCH, "Short RPC packet"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| goto err; | goto err; |
| } else | } else |
| len = ntohl(rpc->call_len); | len = ntohl(rpc->call_len); |
| Line 342 rxPacket(sched_task_t *task) | Line 347 rxPacket(sched_task_t *task) |
| rpc_SetErr(ERPCMISMATCH, "Short RPC packet"); | rpc_SetErr(ERPCMISMATCH, "Short RPC packet"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| goto err; | goto err; |
| } | } |
| Line 361 rxPacket(sched_task_t *task) | Line 366 rxPacket(sched_task_t *task) |
| rpc_SetErr(ERPCMISMATCH, "Bad CRC RPC packet"); | rpc_SetErr(ERPCMISMATCH, "Bad CRC RPC packet"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| goto err; | goto err; |
| } | } |
| #endif | #endif |
| Line 372 rxPacket(sched_task_t *task) | Line 377 rxPacket(sched_task_t *task) |
| rpc_SetErr(ERPCMISMATCH, "Get invalid RPC session"); | rpc_SetErr(ERPCMISMATCH, "Get invalid RPC session"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| goto err; | goto err; |
| } | } |
| Line 458 txUDPPacket(sched_task_t *task) | Line 463 txUDPPacket(sched_task_t *task) |
| rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server"); | rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) { | } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) { |
| rpc_SetErr(EMSGSIZE, "Message too long"); | rpc_SetErr(EMSGSIZE, "Message too long"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else { | } else { |
| rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c)); | rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c)); |
| /* Go Encapsulate variables */ | /* Go Encapsulate variables */ |
| Line 475 txUDPPacket(sched_task_t *task) | Line 480 txUDPPacket(sched_task_t *task) |
| rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); | rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else | } else |
| wlen += ret; | wlen += ret; |
| } | } |
| Line 598 txRAWPacket(sched_task_t *task) | Line 603 txRAWPacket(sched_task_t *task) |
| rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server"); | rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) { | } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) { |
| rpc_SetErr(EMSGSIZE, "Message too long"); | rpc_SetErr(EMSGSIZE, "Message too long"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else { | } else { |
| rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c)); | rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c)); |
| /* Go Encapsulate variables */ | /* Go Encapsulate variables */ |
| Line 613 txRAWPacket(sched_task_t *task) | Line 618 txRAWPacket(sched_task_t *task) |
| RPC_RETVARS(c)); | RPC_RETVARS(c)); |
| if (ret == -1) { | if (ret == -1) { |
| rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); | rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else | } else |
| wlen += ret; | wlen += ret; |
| } | } |
| Line 758 txBPFPacket(sched_task_t *task) | Line 764 txBPFPacket(sched_task_t *task) |
| rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server"); | rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) { | } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) { |
| rpc_SetErr(EMSGSIZE, "Message too long"); | rpc_SetErr(EMSGSIZE, "Message too long"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else { | } else { |
| rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c)); | rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c)); |
| /* Go Encapsulate variables */ | /* Go Encapsulate variables */ |
| Line 775 txBPFPacket(sched_task_t *task) | Line 781 txBPFPacket(sched_task_t *task) |
| rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); | rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else | } else |
| wlen += ret; | wlen += ret; |
| } | } |
| Line 921 txEXTPacket(sched_task_t *task) | Line 927 txEXTPacket(sched_task_t *task) |
| rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server"); | rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) { | } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) { |
| rpc_SetErr(EMSGSIZE, "Message too long"); | rpc_SetErr(EMSGSIZE, "Message too long"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else { | } else { |
| rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c)); | rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c)); |
| /* Go Encapsulate variables */ | /* Go Encapsulate variables */ |
| Line 938 txEXTPacket(sched_task_t *task) | Line 944 txEXTPacket(sched_task_t *task) |
| rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); | rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); |
| rpc->call_argc ^= rpc->call_argc; | rpc->call_argc ^= rpc->call_argc; |
| rpc->call_rep.ret = RPC_ERROR(-1); | RPC_SET_RETURN(rpc, -1); |
| rpc->call_rep.eno = RPC_ERROR(rpc_Errno); | RPC_SET_ERRNO(rpc, rpc_Errno); |
| } else | } else |
| wlen += ret; | wlen += ret; |
| } | } |
| Line 1111 rxBLOB(sched_task_t *task) | Line 1117 rxBLOB(sched_task_t *task) |
| if (!(b = rpc_srv_getBLOB(s, ntohl(blob.hdr_var)))) { | if (!(b = rpc_srv_getBLOB(s, ntohl(blob.hdr_var)))) { |
| rpc_SetErr(EINVAL, "Var=%x not found", ntohl(blob.hdr_var)); | rpc_SetErr(EINVAL, "Var=%x not found", ntohl(blob.hdr_var)); |
| blob.hdr_cmd = no; | blob.hdr_cmd = no; |
| blob.hdr_ret = RPC_ERROR(-1); | RPC_SET_BLOB_RET(&blob, -1); |
| break; | break; |
| } else | } else |
| blob.hdr_len = htonl(b->blob_len); | blob.hdr_len = htonl(b->blob_len); |
| Line 1122 rxBLOB(sched_task_t *task) | Line 1128 rxBLOB(sched_task_t *task) |
| rpc_srv_blobUnmap(b); | rpc_srv_blobUnmap(b); |
| } else { | } else { |
| blob.hdr_cmd = error; | blob.hdr_cmd = error; |
| blob.hdr_ret = RPC_ERROR(-1); | RPC_SET_BLOB_RET(&blob, -1); |
| } | } |
| break; | break; |
| case set: | case set: |
| Line 1136 rxBLOB(sched_task_t *task) | Line 1142 rxBLOB(sched_task_t *task) |
| rpc_srv_blobUnmap(b); | rpc_srv_blobUnmap(b); |
| } else { | } else { |
| blob.hdr_cmd = error; | blob.hdr_cmd = error; |
| blob.hdr_ret = RPC_ERROR(-1); | RPC_SET_BLOB_RET(&blob, -1); |
| } | } |
| break; | break; |
| case unset: | case unset: |
| if (rpc_srv_unregisterBLOB(s, ntohl(blob.hdr_var)) == -1) { | if (rpc_srv_unregisterBLOB(s, ntohl(blob.hdr_var)) == -1) { |
| blob.hdr_cmd = error; | blob.hdr_cmd = error; |
| blob.hdr_ret = RPC_ERROR(-1); | RPC_SET_BLOB_RET(&blob, -1); |
| } | } |
| break; | break; |
| default: | default: |
| rpc_SetErr(EPROCUNAVAIL, "Unsupported BLOB command %d", blob.hdr_cmd); | rpc_SetErr(EPROCUNAVAIL, "Unsupported BLOB command %d", blob.hdr_cmd); |
| blob.hdr_cmd = error; | blob.hdr_cmd = error; |
| blob.hdr_ret = RPC_ERROR(-1); | RPC_SET_BLOB_RET(&blob, -1); |
| } | } |
| end: | end: |