Ai
1 Star 0 Fork 4

eleluq1234/TCP协议栈

forked from 邵温财/TCP协议栈 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
utils.c 2.00 KB
一键复制 编辑 原始数据 按行查看 历史
邵温财 提交于 2021-07-15 11:16 +08:00 . 支持阻塞接受
#include "utils.h"
u16_t chksum(u16_t sum, const u8_t *data, u16_t len)
{
u16_t t;
const u8_t *dataptr;
const u8_t *last_byte;
dataptr = data;
last_byte = data + len - 1;
while(dataptr < last_byte)
{ /* At least two more bytes */
t = (dataptr[0] << 8) + dataptr[1];
sum += t;
if(sum < t)
{
sum++; /* carry */
}
dataptr += 2;
}
if(dataptr == last_byte)
{
t = (dataptr[0] << 8) + 0;
sum += t;
if(sum < t)
{
sum++; /* carry */
}
}
/* Return sum in host byte order. */
return sum;
}
char *uip_ntoa(uip_ipaddr_t addr, char *buf, int buflen)
{
u32_t s_addr;
char inv[3];
char *rp;
u8_t *ap;
u8_t rem;
u8_t n;
u8_t i;
int len = 0;
s_addr = *(u32_t *)addr;
rp = buf;
ap = (u8_t *) &s_addr;
for (n = 0; n < 4; n++)
{
i = 0;
do
{
rem = *ap % (u8_t) 10;
*ap /= (u8_t) 10;
inv[i++] = (char) ('0' + rem);
} while (*ap);
while (i--)
{
if (len++ >= buflen)
{
return NULL;
}
*rp++ = inv[i];
}
if (len++ >= buflen)
{
return NULL;
}
*rp++ = '.';
ap++;
}
*--rp = 0;
return buf;
}
u8_t uip_aton(const char *addrstr, u8_t *ipaddr)
{
u8_t tmp;
char c;
u8_t i, j;
tmp = 0;
for(i = 0; i < 4; ++i)
{
j = 0;
do
{
c = *addrstr;
++j;
if(j > 4)
{
return 0;
}
if(c == '.' || c == 0)
{
*ipaddr = tmp;
++ipaddr;
tmp = 0;
}
else if(c >= '0' && c <= '9')
{
tmp = (tmp * 10) + (c - '0');
}
else
{
return 0;
}
++addrstr;
} while(c != '.' && c != 0);
}
return 1;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/eleluq1234/tcp-stack.git
git@gitee.com:eleluq1234/tcp-stack.git
eleluq1234
tcp-stack
TCP协议栈
master

搜索帮助