76 #if LWIP_CHECKSUM_ON_COPY 92 #define SIZEOF_STRUCT_PBUF LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) 95 #define PBUF_POOL_BUFSIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(PBUF_POOL_BUFSIZE) 104 pbuf_free_ooseq_new(
void* arg)
107 struct tcp_seg *head =
NULL;
108 struct tcp_seg *seg1 =
NULL;
109 struct tcp_seg *seg2 =
NULL;
110 for (pcb = tcp_active_pcbs;
NULL != pcb; pcb = pcb->next) {
114 if (seg1->next ==
NULL){
119 while (seg1 !=
NULL){
122 if (seg2 ->next ==
NULL){
123 seg1->next = seg2->next;
136 #if !LWIP_TCP || !TCP_QUEUE_OOSEQ || NO_SYS 137 #define PBUF_POOL_IS_EMPTY() 140 #ifndef PBUF_POOL_FREE_OOSEQ 141 #define PBUF_POOL_FREE_OOSEQ 1 144 #if PBUF_POOL_FREE_OOSEQ 146 #define PBUF_POOL_IS_EMPTY() pbuf_pool_is_empty() 147 static u8_t pbuf_free_ooseq_queued;
157 pbuf_free_ooseq(
void* arg)
164 pbuf_free_ooseq_queued = 0;
167 for (pcb = tcp_active_pcbs;
NULL != pcb; pcb = pcb->next) {
168 if (
NULL != pcb->ooseq) {
171 tcp_segs_free(pcb->ooseq);
180 pbuf_pool_is_empty(
void)
186 queued = pbuf_free_ooseq_queued;
187 pbuf_free_ooseq_queued = 1;
194 pbuf_free_ooseq_queued = 0;
236 struct pbuf *p, *q, *r;
256 #ifdef PBUF_RSV_FOR_WLAN 282 #ifdef PBUF_RSV_FOR_WLAN 308 LWIP_ASSERT(
"pbuf_alloc: pbuf p->payload properly aligned",
314 LWIP_ASSERT(
"check p->payload + p->len does not overflow pbuf",
315 ((
u8_t*)p->payload + p->len <=
317 LWIP_ASSERT(
"PBUF_POOL_BUFSIZE must be bigger than MEM_ALIGNMENT",
327 rem_len = length - p->
len;
329 while (rem_len > 0) {
344 LWIP_ASSERT(
"rem_len < max_u16_t", rem_len < 0xffff);
349 LWIP_ASSERT(
"pbuf_alloc: pbuf q->payload properly aligned",
351 LWIP_ASSERT(
"check p->payload + p->len does not overflow pbuf",
352 ((
u8_t*)p->payload + p->len <=
372 p->len = p->tot_len = length;
377 LWIP_ASSERT(
"pbuf_alloc: pbuf->payload properly aligned",
378 ((
mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0);
391 (
"pbuf_alloc: Could not allocate MEMP_PBUF for PBUF_%s.\n",
392 (type ==
PBUF_ROM) ?
"ROM" :
"REF"));
397 p->len = p->tot_len = length;
414 #if LWIP_SUPPORT_CUSTOM_PBUF 430 void *payload_mem,
u16_t payload_mem_len)
453 LWIP_ASSERT(
"pbuf_alloced_custom: bad pbuf layer", 0);
463 if (payload_mem !=
NULL) {
466 p->pbuf.payload =
NULL;
469 p->pbuf.len = p->pbuf.tot_len = length;
518 while (rem_len > q->
len) {
577 u16_t increment_magnitude;
580 if ((header_size_increment == 0) || (p ==
NULL)) {
584 if (header_size_increment < 0){
585 increment_magnitude = -header_size_increment;
587 LWIP_ERROR(
"increment_magnitude <= p->len", (increment_magnitude <= p->
len),
return 1;);
589 increment_magnitude = header_size_increment;
594 LWIP_ASSERT(
"p->type == PBUF_RAM || p->type == PBUF_POOL",
597 LWIP_ASSERT(
"p->payload - increment_magnitude >= p + SIZEOF_STRUCT_PBUF",
613 (
"pbuf_header: failed as %p < %p (not enough space for new header size)\n",
614 (
void *)p->
payload, (
void *)(p + 1)));
623 if ((header_size_increment < 0) && (increment_magnitude <= p->
len)) {
642 p->
len += header_size_increment;
643 p->
tot_len += header_size_increment;
646 (
void *)payload, (
void *)p->
payload, header_size_increment));
695 (
"pbuf_free(p == NULL) was called.\n"));
706 || p->type == PBUF_ESF_RX
731 #if LWIP_SUPPORT_CUSTOM_PBUF 734 struct pbuf_custom *pc = (
struct pbuf_custom*)p;
735 LWIP_ASSERT(
"pc->custom_free_function != NULL", pc->custom_free_function !=
NULL);
736 pc->custom_free_function(p);
746 || type == PBUF_ESF_RX
750 system_pp_recycle_rx_pkt(p->eb);
827 LWIP_ERROR(
"(h != NULL) && (t != NULL) (programmer violates API)",
828 ((h !=
NULL) && (t !=
NULL)),
return;);
902 (
"pbuf_dechain: deallocated %p (as it is no longer referenced)\n", (
void *)q));
908 return ((tail_gone > 0) ?
NULL : q);
932 u16_t offset_to=0, offset_from=0,
len;
935 (
void*)p_to, (
void*)p_from));
938 LWIP_ERROR(
"pbuf_copy: target not big enough to hold source", ((p_to !=
NULL) &&
939 (p_from !=
NULL) && (p_to->tot_len >= p_from->tot_len)),
return ERR_ARG;);
946 if ((p_to->len - offset_to) >= (p_from->len - offset_from)) {
948 len = p_from->len - offset_from;
951 len = p_to->len - offset_to;
953 MEMCPY((
u8_t*)p_to->payload + offset_to, (
u8_t*)p_from->payload + offset_from,
len);
957 if (offset_to == p_to->len) {
962 LWIP_ASSERT(
"offset_from <= p_from->len", offset_from <= p_from->len);
963 if (offset_from >= p_from->len) {
966 p_from = p_from->next;
969 if((p_from !=
NULL) && (p_from->len == p_from->tot_len)) {
971 LWIP_ERROR(
"pbuf_copy() does not allow packet queues!\n",
974 if((p_to !=
NULL) && (p_to->len == p_to->tot_len)) {
976 LWIP_ERROR(
"pbuf_copy() does not allow packet queues!\n",
1001 u16_t copied_total = 0;
1003 LWIP_ERROR(
"pbuf_copy_partial: invalid buf", (buf !=
NULL),
return 0;);
1004 LWIP_ERROR(
"pbuf_copy_partial: invalid dataptr", (dataptr !=
NULL),
return 0;);
1008 if((buf ==
NULL) || (dataptr ==
NULL)) {
1013 for(p = buf; len != 0 && p !=
NULL; p = p->
next) {
1014 if ((offset != 0) && (offset >= p->
len)) {
1019 buf_copy_len = p->
len - offset;
1020 if (buf_copy_len > len)
1023 MEMCPY(&((
char*)dataptr)[left], &((
char*)p->
payload)[offset], buf_copy_len);
1024 copied_total += buf_copy_len;
1025 left += buf_copy_len;
1026 len -= buf_copy_len;
1030 return copied_total;
1049 u16_t copied_total = 0;
1052 LWIP_ERROR(
"pbuf_take: invalid dataptr", (dataptr !=
NULL),
return 0;);
1059 for(p = buf; total_copy_len != 0; p = p->
next) {
1061 buf_copy_len = total_copy_len;
1062 if (buf_copy_len > p->
len) {
1064 buf_copy_len = p->
len;
1067 MEMCPY(p->
payload, &((
char*)dataptr)[copied_total], buf_copy_len);
1068 total_copy_len -= buf_copy_len;
1069 copied_total += buf_copy_len;
1071 LWIP_ASSERT(
"did not copy all data", total_copy_len == 0 && copied_total == len);
1106 #if LWIP_CHECKSUM_ON_COPY 1120 pbuf_fill_chksum(
struct pbuf *p,
u16_t start_offset,
const void *dataptr,
1131 if ((start_offset >= p->
len) || (start_offset +
len > p->
len)) {
1135 dst_ptr = ((
char*)p->
payload) + start_offset;
1136 copy_chksum = LWIP_CHKSUM_COPY(dst_ptr, dataptr,
len);
1137 if ((start_offset & 1) != 0) {
1157 u16_t copy_from = offset;
1161 while ((q !=
NULL) && (q->
len <= copy_from)) {
1162 copy_from -= q->
len;
1166 if ((q !=
NULL) && (q->
len > copy_from)) {
1184 u16_t start = offset;
1188 while ((q !=
NULL) && (q->
len <= start)) {
1193 if ((q !=
NULL) && (q->
len > start)) {
1195 for(i = 0; i < n; i++) {
1222 if (p->
tot_len >= mem_len + start_offset) {
1223 for(i = start_offset; i <= max; ) {
1249 if ((substr ==
NULL) || (substr[0] == 0) || (p->
tot_len == 0xFFFF)) {
1253 if (substr_len >= 0xFFFF) {
void memp_free(memp_t type, void *mem) ICACHE_FLASH_ATTR
u8_t pbuf_header(struct pbuf *p, s16_t header_size_increment)
void pbuf_realloc(struct pbuf *p, u16_t new_len)
const ip_addr_t ip_addr_any ICACHE_RODATA_ATTR
#define ICACHE_FLASH_ATTR
u16_t pbuf_memcmp(struct pbuf *p, u16_t offset, const void *s2, u16_t n)
void * memp_malloc(memp_t type) ICACHE_FLASH_ATTR
void * mem_malloc(mem_size_t size) ICACHE_FLASH_ATTR
struct pbuf * pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type)
#define SYS_ARCH_DECL_PROTECT(x)
#define LWIP_ERROR(message, expression, handler)
u8_t pbuf_free(struct pbuf *p)
err_t pbuf_copy(struct pbuf *p_to, struct pbuf *p_from)
#define SIZEOF_STRUCT_PBUF
#define PBUF_TRANSPORT_HLEN
#define LWIP_MEM_ALIGN_SIZE(size)
u16_t pbuf_memfind(struct pbuf *p, const void *mem, u16_t mem_len, u16_t start_offset)
#define LWIP_DEBUGF(debug, message)
err_t pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len)
#define PBUF_POOL_BUFSIZE_ALIGNED
#define LWIP_DBG_LEVEL_SERIOUS
void pbuf_chain(struct pbuf *h, struct pbuf *t)
err_t tcpip_callback_with_block(tcpip_callback_fn function, void *ctx, u8_t block)
#define SWAP_BYTES_IN_WORD(w)
#define LWIP_DBG_LEVEL_WARNING
struct pbuf * pbuf_dechain(struct pbuf *p)
void pbuf_ref(struct pbuf *p)
void * mem_trim(void *mem, mem_size_t size) ICACHE_FLASH_ATTR
#define SYS_ARCH_PROTECT(x)
#define PBUF_FLAG_IS_CUSTOM
u16_t pbuf_copy_partial(struct pbuf *buf, void *dataptr, u16_t len, u16_t offset)
u8_t pbuf_clen(struct pbuf *p)
void pbuf_cat(struct pbuf *h, struct pbuf *t)
u8_t pbuf_get_at(struct pbuf *p, u16_t offset)
#define MEMCPY(dst, src, len)
#define LWIP_ASSERT(message, assertion)
#define PBUF_POOL_IS_EMPTY()
u16_t pbuf_strstr(struct pbuf *p, const char *substr)
#define SYS_ARCH_UNPROTECT(x)
#define LWIP_UNUSED_ARG(x)
struct pbuf * pbuf_coalesce(struct pbuf *p, pbuf_layer layer)
#define LWIP_MEM_ALIGN(addr)
void mem_free(void *mem) ICACHE_FLASH_ATTR