From 889cf5070947943bcb5fb30794325aeef1ec2ab6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=A3=8E?= Date: Wed, 8 Aug 2012 13:55:51 +0800 Subject: [PATCH] use big-endian for client package --- client.c | 6 +++--- gate/main.c | 8 +++++--- service_client.c | 3 ++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/client.c b/client.c index 759fd78c..2df5a10d 100644 --- a/client.c +++ b/client.c @@ -38,7 +38,7 @@ _read(void *ud) { uint8_t header[2]; fflush(stdout); readall(fd, header, 2); - size_t len = header[0] | header[1] << 8; + size_t len = header[0] << 8 | header[1]; if (len>0) { char tmp[len+1]; readall(fd, tmp, len); @@ -56,8 +56,8 @@ test(int fd) { fgets(tmp,sizeof(tmp),stdin); int n = strlen(tmp) -1; uint8_t head[2]; - head[0] = n & 0xff; - head[1] = (n >> 8) & 0xff; + head[0] = (n >> 8) & 0xff; + head[1] = n & 0xff; int r; r = send(fd, head, 2, 0); if (r<0) { diff --git a/gate/main.c b/gate/main.c index 227da40d..0eff628a 100644 --- a/gate/main.c +++ b/gate/main.c @@ -183,7 +183,7 @@ _cb(struct skynet_context * ctx, void * ud, int session, const char * uid, const getpeername(fd, (struct sockaddr *)&remote_addr, &len); _report(ctx, "%d open %d %s:%u",id,fd,inet_ntoa(remote_addr.sin_addr),ntohs(remote_addr.sin_port)); } - uint16_t * plen = mread_pull(m,2); + uint8_t * plen = mread_pull(m,2); if (plen == NULL) { if (mread_closed(m)) { _remove_id(g,id); @@ -191,7 +191,9 @@ _cb(struct skynet_context * ctx, void * ud, int session, const char * uid, const } goto _break; } - void * data = mread_pull(m, *plen); + // big-endian + uint16_t len = plen[0] << 8 | plen[1]; + void * data = mread_pull(m, len); if (data == NULL) { if (mread_closed(m)) { _remove_id(g,id); @@ -200,7 +202,7 @@ _cb(struct skynet_context * ctx, void * ud, int session, const char * uid, const goto _break; } - _forward(ctx, g, id, data, *plen); + _forward(ctx, g, id, data, len); mread_yield(m); _break: skynet_command(ctx, "TIMEOUT", "0"); diff --git a/service_client.c b/service_client.c index c3d0f9a6..25af7807 100644 --- a/service_client.c +++ b/service_client.c @@ -15,7 +15,8 @@ _cb(struct skynet_context * context, void * ud, int session, const char * addr, int fd = (int)(intptr_t)ud; struct iovec buffer[2]; - uint8_t head[2] = { sz & 0xff , sz >> 8 & 0xff }; + // send big-endian header + uint8_t head[2] = { sz >> 8 & 0xff , sz & 0xff }; buffer[0].iov_base = head; buffer[0].iov_len = 2; buffer[1].iov_base = (void *)msg;