|
|
| version 1.28.2.2, 2016/08/02 10:39:50 | version 1.28.2.4, 2016/08/02 15:18:41 |
|---|---|
| Line 401 acceptClients(sched_task_t *task) | Line 401 acceptClients(sched_task_t *task) |
| { | { |
| rpc_srv_t *srv = TASK_ARG(task); | rpc_srv_t *srv = TASK_ARG(task); |
| rpc_cli_t *c = NULL; | rpc_cli_t *c = NULL; |
| socklen_t salen = sizeof(sockaddr_t); | socklen_t salen = E_SOCKADDR_MAX; |
| int sock; | int sock; |
| #ifdef TCP_SESSION_TIMEOUT | #ifdef TCP_SESSION_TIMEOUT |
| struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; | struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; |
| Line 498 txUDPPacket(sched_task_t *task) | Line 498 txUDPPacket(sched_task_t *task) |
| /* send reply */ | /* send reply */ |
| ret = sendto(TASK_FD(task), buf, wlen, MSG_NOSIGNAL, | ret = sendto(TASK_FD(task), buf, wlen, MSG_NOSIGNAL, |
| &c->cli_sa.sa, sizeof c->cli_sa.sa); | &c->cli_sa.sa, e_addrlen(&c->cli_sa)); |
| if (ret == -1) { | if (ret == -1) { |
| /* close connection */ | /* close connection */ |
| schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], | schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], |
| Line 517 rxUDPPacket(sched_task_t *task) | Line 517 rxUDPPacket(sched_task_t *task) |
| u_short crc; | u_short crc; |
| struct tagRPCCall *rpc; | struct tagRPCCall *rpc; |
| sockaddr_t sa; | sockaddr_t sa; |
| socklen_t salen = (u_char) MIN(sizeof(sockaddr_t), 0xff); | socklen_t salen = E_SOCKADDR_MAX; |
| struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; | struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; |
| ait_val_t b = AIT_VAL_INIT; | ait_val_t b = AIT_VAL_INIT; |
| Line 640 txRAWPacket(sched_task_t *task) | Line 640 txRAWPacket(sched_task_t *task) |
| /* send reply */ | /* send reply */ |
| ret = sendto(TASK_FD(task), buf, wlen, MSG_NOSIGNAL, | ret = sendto(TASK_FD(task), buf, wlen, MSG_NOSIGNAL, |
| &c->cli_sa.sa, sizeof c->cli_sa.sa); | &c->cli_sa.sa, e_addrlen(&c->cli_sa)); |
| if (ret == -1) { | if (ret == -1) { |
| /* close connection */ | /* close connection */ |
| schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], | schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], |
| Line 659 rxRAWPacket(sched_task_t *task) | Line 659 rxRAWPacket(sched_task_t *task) |
| u_short crc; | u_short crc; |
| struct tagRPCCall *rpc; | struct tagRPCCall *rpc; |
| sockaddr_t sa; | sockaddr_t sa; |
| socklen_t salen = (u_char) MIN(sizeof(sockaddr_t), 0xff); | socklen_t salen = E_SOCKADDR_MAX; |
| struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; | struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; |
| ait_val_t b = AIT_VAL_INIT; | ait_val_t b = AIT_VAL_INIT; |
| Line 679 rxRAWPacket(sched_task_t *task) | Line 679 rxRAWPacket(sched_task_t *task) |
| rpc = (struct tagRPCCall*) (h + 1); | rpc = (struct tagRPCCall*) (h + 1); |
| } | } |
| } else { | } else { |
| #ifdef IPV6_REMOVE_HEADER | |
| struct ip6_hdr *h; | struct ip6_hdr *h; |
| h = (struct ip6_hdr*) AIT_GET_BUF(&b); | h = (struct ip6_hdr*) AIT_GET_BUF(&b); |
| if (rlen < (ntohs(h->ip6_plen) + sizeof(struct ip6_hdr)) || | if (rlen < ntohs(h->ip6_plen) || h->ip6_nxt != IPPROTO_ERPC) |
| h->ip6_nxt != IPPROTO_ERPC) | |
| goto end; | goto end; |
| else { | else { |
| rlen -= sizeof(struct ip6_hdr); | rlen -= sizeof(struct ip6_hdr); |
| rpc = (struct tagRPCCall*) (h + 1); | rpc = (struct tagRPCCall*) (h + 1); |
| } | } |
| #else | |
| rpc = (struct tagRPCCall*) AIT_GET_BUF(&b); | |
| #endif | |
| } | } |
| if (rlen < sizeof(struct tagRPCCall)) | if (rlen < sizeof(struct tagRPCCall)) |
| goto end; | goto end; |
| Line 1214 acceptBLOBClients(sched_task_t *task) | Line 1217 acceptBLOBClients(sched_task_t *task) |
| rpc_srv_t *srv = TASK_ARG(task); | rpc_srv_t *srv = TASK_ARG(task); |
| rpc_cli_t *c = NULL; | rpc_cli_t *c = NULL; |
| register int i; | register int i; |
| socklen_t salen = sizeof(sockaddr_t); | socklen_t salen = E_SOCKADDR_MAX; |
| int sock; | int sock; |
| #ifdef TCP_NOPUSH | #ifdef TCP_NOPUSH |
| int n = 1; | int n = 1; |
| Line 1281 int | Line 1284 int |
| rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_short Port, const char *diskDir) | rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_short Port, const char *diskDir) |
| { | { |
| int n = 1; | int n = 1; |
| socklen_t salen; | |
| if (!srv || srv->srv_kill) { | if (!srv || srv->srv_kill) { |
| rpc_SetErr(EINVAL, "Invalid parameters can`t init BLOB server"); | rpc_SetErr(EINVAL, "Invalid parameters can`t init BLOB server"); |
| Line 1299 rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s | Line 1303 rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s |
| srv->srv_blob.server.cli_parent = srv; | srv->srv_blob.server.cli_parent = srv; |
| memcpy(&srv->srv_blob.server.cli_sa, &srv->srv_server.cli_sa, sizeof(sockaddr_t)); | memcpy(&srv->srv_blob.server.cli_sa, &srv->srv_server.cli_sa, sizeof srv->srv_blob.server.cli_sa); |
| switch (srv->srv_blob.server.cli_sa.sa.sa_family) { | switch (srv->srv_blob.server.cli_sa.sa.sa_family) { |
| case AF_INET: | case AF_INET: |
| srv->srv_blob.server.cli_sa.sin.sin_port = | srv->srv_blob.server.cli_sa.sin.sin_port = |
| htons(Port ? Port : ntohs(srv->srv_blob.server.cli_sa.sin.sin_port) + 1); | htons(Port ? Port : ntohs(srv->srv_blob.server.cli_sa.sin.sin_port) + 1); |
| salen = sizeof srv->srv_blob.server.cli_sa.sin; | |
| break; | break; |
| case AF_INET6: | case AF_INET6: |
| srv->srv_blob.server.cli_sa.sin6.sin6_port = | srv->srv_blob.server.cli_sa.sin6.sin6_port = |
| htons(Port ? Port : ntohs(srv->srv_blob.server.cli_sa.sin6.sin6_port) + 1); | htons(Port ? Port : ntohs(srv->srv_blob.server.cli_sa.sin6.sin6_port) + 1); |
| salen = sizeof srv->srv_blob.server.cli_sa.sin6; | |
| break; | break; |
| case AF_LOCAL: | case AF_LOCAL: |
| strlcat(srv->srv_blob.server.cli_sa.sun.sun_path, ".blob", | strlcat(srv->srv_blob.server.cli_sa.sun.sun_path, ".blob", |
| sizeof srv->srv_blob.server.cli_sa.sun.sun_path); | sizeof srv->srv_blob.server.cli_sa.sun.sun_path); |
| salen = sizeof srv->srv_blob.server.cli_sa.sun; | |
| break; | break; |
| default: | default: |
| AIT_FREE_VAL(&srv->srv_blob.dir); | AIT_FREE_VAL(&srv->srv_blob.dir); |
| Line 1344 rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s | Line 1351 rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s |
| AIT_FREE_VAL(&srv->srv_blob.dir); | AIT_FREE_VAL(&srv->srv_blob.dir); |
| return -1; | return -1; |
| } | } |
| if (bind(srv->srv_blob.server.cli_sock, &srv->srv_blob.server.cli_sa.sa, | if (bind(srv->srv_blob.server.cli_sock, &srv->srv_blob.server.cli_sa.sa, salen) == -1) { |
| sizeof srv->srv_blob.server.cli_sa.sa) == -1) { | |
| LOGERR; | LOGERR; |
| close(srv->srv_blob.server.cli_sock); | close(srv->srv_blob.server.cli_sock); |
| AIT_FREE_VAL(&srv->srv_blob.dir); | AIT_FREE_VAL(&srv->srv_blob.dir); |
| Line 1495 rpc_srv_initServer(u_char InstID, int concurentClients | Line 1501 rpc_srv_initServer(u_char InstID, int concurentClients |
| int n = 1; | int n = 1; |
| rpc_srv_t *srv = NULL; | rpc_srv_t *srv = NULL; |
| sockaddr_t sa = E_SOCKADDR_INIT; | sockaddr_t sa = E_SOCKADDR_INIT; |
| socklen_t salen; | |
| if (!concurentClients || (proto < 0 || proto > SOCK_RAW)) { | if (!concurentClients || (proto < 0 || proto > SOCK_RAW)) { |
| rpc_SetErr(EINVAL, "Invalid parameters can`t init RPC server"); | rpc_SetErr(EINVAL, "Invalid parameters can`t init RPC server"); |
| Line 1502 rpc_srv_initServer(u_char InstID, int concurentClients | Line 1509 rpc_srv_initServer(u_char InstID, int concurentClients |
| } | } |
| if (!Port && proto < SOCK_RAW) | if (!Port && proto < SOCK_RAW) |
| Port = RPC_DEFPORT; | Port = RPC_DEFPORT; |
| if (!e_gethostbyname(csHost, Port, &sa)) | if (!(salen = e_gethostbyname(csHost, Port, &sa))) |
| return NULL; | return NULL; |
| if (!proto) | if (!proto) |
| proto = SOCK_STREAM; | proto = SOCK_STREAM; |
| Line 1584 rpc_srv_initServer(u_char InstID, int concurentClients | Line 1591 rpc_srv_initServer(u_char InstID, int concurentClients |
| LOGERR; | LOGERR; |
| goto err; | goto err; |
| } | } |
| if (bind(srv->srv_server.cli_sock, &srv->srv_server.cli_sa.sa, | if (bind(srv->srv_server.cli_sock, &srv->srv_server.cli_sa.sa, salen) == -1) { |
| sizeof srv->srv_server.cli_sa.sa) == -1) { | |
| LOGERR; | LOGERR; |
| goto err; | goto err; |
| } else | } else |