传输协议格式(stream trans)
1st
Edit: 2015-04-29
2nd
Edit:2015-04-30
gateway 和 server 之间的通信接口按照脚本调用的方式,最简单化处理。如下图所示:
顶层封装出口如下,其中有一部分是无需调用。不过为了后续的更灵活的方式操作。因此也留出了接口。
/**** application layer calling ****/
/* calling this function first to create tcp server socket */
IOT_SEC_API SOCKET iot_create_server(UCHAR* addr, UINT32 port, LPVOID paraPTR);
/*调用该方法获取一个客户的链接,注意:这里是阻塞的,并且是获取仅仅一个客户链接*/
IOT_SEC_API SOCKET iot_accept_client(SOCKET serverSocket);
/*关闭SOCKET 套接字*/
IOT_SEC_API int iot_close_socket(SOCKET wsocket);/*close win socket*/
/*发送一个已经打包好的数据*/
IOT_SEC_API int send_iot_packet(SOCKET fd, IOTPKT* pkt);
/*阻塞接受一个已经打包好的数据*/
IOT_SEC_API int recv_iot_packet(SOCKET fd, IOTPKT* pkt);
/**** 内部函数 ****/
/*阻塞发送一个数据包,通过套接字*/
IOT_SEC_API int iot_send_socket(SOCKET fd, UCHAR* data, int length);
/*阻塞接受一个数据包,通过套接字*/
IOT_SEC_API int iot_recv_socket(SOCKET fd, UCHAR* read, int maxlength);
/*序列化为IOTPKT包*/
IOT_SEC_API int pack_iot_data(UCHAR* out, int* outlength, IOTPKT* pkt);
/*解包,二进制流反序列化为IOTPKT包*/
IOT_SEC_API int unpack_iot_data(UCHAR* in, int* inlength, IOTPKT* pkt);
/*链路上封包*/
IOT_SEC_API int package_data(UCHAR* in, int* inlength, UCHAR* out, int *outlength);
/*链路上解包*/
IOT_SEC_API int unpack_data(UCHAR* in, int* inlength, UCHAR* out, int *outlength);
网关作为中间角色的作用是,接受下面传递的信息,发送到上面Service center;
SENSOR 到 WIRELESS
作为这个环节的数据内容,负载内容是不知的,没有统一格式,而传输的链路数据格式具体如下:
2 bytes | 4 bytes | k byts |
---|---|---|
0xAA 0x55 | length | 负载 |
Coordinator到网关
从Coorinator 到 gateway 的数据格式(两条链路传输格式一致)
链路封装格式
2 bytes | 4 bytes | k byts |
---|---|---|
0xAA 0x55 | length | 负载 |
注意:length代表就是负载的长度,并不包括length本身的长度和前导字的长度
负载载荷内容为统一结构格式如下:
typedef struct _addr{
union{
char subaddr[4];
int netnwk;
}addr;//地址是个联合体
}ADDR;
typedef struct data{
ADDR src;
ADDR router;
char* apdu;
UINT16 MODE;
}
注意:之前data中的apdulength现在改为UINT16 MODE,是一个数据包模式选项字节,当前为保留值,设置为0