Trans Protocol

传输协议格式(stream trans)

1st Edit: 2015-04-29
2nd Edit:2015-04-30

gateway 和 server 之间的通信接口按照脚本调用的方式,最简单化处理。如下图所示:

Created with Raphaël 2.1.2 Gateway Gateway Server Server encryption data;[数据内容不关心] 由web自行处理数据 要求发送的数据,打包发送到Gateway

顶层封装出口如下,其中有一部分是无需调用。不过为了后续的更灵活的方式操作。因此也留出了接口。

/**** 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
Created with Raphaël 2.1.2 Sensor Sensor wireless wireless encryption data;[数据内容不关心] 将该数据传输到collect (coordinator) 将接收到的数据,(如果封装了要去掉封装),发给Sensor

作为这个环节的数据内容,负载内容是不知的,没有统一格式,而传输的链路数据格式具体如下:

2 bytes4 bytesk byts
0xAA 0x55length负载

 

Coordinator到网关
Created with Raphaël 2.1.2 Coordinator Coordinator gateway gateway 按格式打包的数据 解析数据并打包发送的web service 按照格式打包从web过来的数据,返回给Coordinator

从Coorinator 到 gateway 的数据格式(两条链路传输格式一致)

链路封装格式

2 bytes4 bytesk byts
0xAA 0x55length负载

注意: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值