/[lwip]/lwip/src/api/api_msg.c
ViewVC logotype

Diff of /lwip/src/api/api_msg.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.6 by jani, Fri Jan 24 09:24:44 2003 UTC revision 1.7 by davidhaas, Thu Feb 6 22:18:56 2003 UTC
# Line 52  recv_tcp(void *arg, struct tcp_pcb *pcb, Line 52  recv_tcp(void *arg, struct tcp_pcb *pcb,
52    
53    if(conn->recvmbox != SYS_MBOX_NULL) {    if(conn->recvmbox != SYS_MBOX_NULL) {
54      conn->err = err;      conn->err = err;
55            conn->recv_avail += p->tot_len;
56        /* Register event with callback */
57        if (conn->callback)
58            (*conn->callback)(conn, NETCONN_EVT_RCVPLUS, p->tot_len);
59      sys_mbox_post(conn->recvmbox, p);      sys_mbox_post(conn->recvmbox, p);
60    }      }  
61    return ERR_OK;    return ERR_OK;
# Line 82  recv_udp(void *arg, struct udp_pcb *pcb, Line 86  recv_udp(void *arg, struct udp_pcb *pcb,
86        buf->fromaddr = addr;        buf->fromaddr = addr;
87        buf->fromport = port;        buf->fromport = port;
88      }      }
89        
90            conn->recv_avail += p->tot_len;
91        /* Register event with callback */
92        if (conn->callback)
93            (*conn->callback)(conn, NETCONN_EVT_RCVPLUS, p->tot_len);
94      sys_mbox_post(conn->recvmbox, buf);      sys_mbox_post(conn->recvmbox, buf);
95    }    }
96  }  }
# Line 111  sent_tcp(void *arg, struct tcp_pcb *pcb, Line 119  sent_tcp(void *arg, struct tcp_pcb *pcb,
119    if(conn != NULL && conn->sem != SYS_SEM_NULL) {    if(conn != NULL && conn->sem != SYS_SEM_NULL) {
120      sys_sem_signal(conn->sem);      sys_sem_signal(conn->sem);
121    }    }
122    
123      if (conn && conn->callback)
124          if (tcp_sndbuf(conn->pcb.tcp) > TCP_SNDLOWAT)
125              (*conn->callback)(conn, NETCONN_EVT_SENDPLUS, len);
126      
127    return ERR_OK;    return ERR_OK;
128  }  }
129  /*-----------------------------------------------------------------------------------*/  /*-----------------------------------------------------------------------------------*/
# Line 126  err_tcp(void *arg, err_t err) Line 139  err_tcp(void *arg, err_t err)
139        
140    conn->err = err;    conn->err = err;
141    if(conn->recvmbox != SYS_MBOX_NULL) {    if(conn->recvmbox != SYS_MBOX_NULL) {
142        /* Register event with callback */
143        if (conn->callback)
144          (*conn->callback)(conn, NETCONN_EVT_RCVPLUS, 0);
145      sys_mbox_post(conn->recvmbox, NULL);      sys_mbox_post(conn->recvmbox, NULL);
146    }    }
147    if(conn->mbox != SYS_MBOX_NULL) {    if(conn->mbox != SYS_MBOX_NULL) {
148      sys_mbox_post(conn->mbox, NULL);      sys_mbox_post(conn->mbox, NULL);
149    }    }
150    if(conn->acceptmbox != SYS_MBOX_NULL) {    if(conn->acceptmbox != SYS_MBOX_NULL) {
151         /* Register event with callback */
152        if (conn->callback)
153          (*conn->callback)(conn, NETCONN_EVT_RCVPLUS, 0);
154      sys_mbox_post(conn->acceptmbox, NULL);      sys_mbox_post(conn->acceptmbox, NULL);
155    }    }
156    if(conn->sem != SYS_SEM_NULL) {    if(conn->sem != SYS_SEM_NULL) {
# Line 155  setup_tcp(struct netconn *conn) Line 174  setup_tcp(struct netconn *conn)
174  static err_t  static err_t
175  accept_function(void *arg, struct tcp_pcb *newpcb, err_t err)  accept_function(void *arg, struct tcp_pcb *newpcb, err_t err)
176  {  {
177    sys_mbox_t *mbox;    sys_mbox_t mbox;
178    struct netconn *newconn;    struct netconn *newconn;
179      struct netconn *conn;
180        
181  #if API_MSG_DEBUG  #if API_MSG_DEBUG
182  #if TCP_DEBUG  #if TCP_DEBUG
183    tcp_debug_print_state(newpcb->state);    tcp_debug_print_state(newpcb->state);
184  #endif /* TCP_DEBUG */  #endif /* TCP_DEBUG */
185  #endif /* API_MSG_DEBUG */  #endif /* API_MSG_DEBUG */
186    mbox = (sys_mbox_t *)arg;    conn = (struct netconn *)arg;
187      mbox = conn->acceptmbox;
188    newconn = memp_mallocp(MEMP_NETCONN);    newconn = memp_mallocp(MEMP_NETCONN);
189    if(newconn == NULL) {    if(newconn == NULL) {
190      return ERR_MEM;      return ERR_MEM;
# Line 191  accept_function(void *arg, struct tcp_pc Line 212  accept_function(void *arg, struct tcp_pc
212    }    }
213    newconn->acceptmbox = SYS_MBOX_NULL;    newconn->acceptmbox = SYS_MBOX_NULL;
214    newconn->err = err;    newconn->err = err;
215    sys_mbox_post(*mbox, newconn);    /* Register event with callback */
216      if (conn->callback)
217      {
218        (*conn->callback)(conn, NETCONN_EVT_RCVPLUS, 0);
219        /* We have to set the callback here even though
220         * the new socket is unknown. Mark the socket as -1. */
221        newconn->callback = conn->callback;
222        newconn->socket = -1;
223      }
224      
225      sys_mbox_post(mbox, newconn);
226    return ERR_OK;    return ERR_OK;
227  }  }
228  /*-----------------------------------------------------------------------------------*/  /*-----------------------------------------------------------------------------------*/
# Line 232  do_delconn(struct api_msg_msg *msg) Line 263  do_delconn(struct api_msg_msg *msg)
263      break;      break;
264      }      }
265    }    }
266      /* Trigger select() in socket layer */
267      if (msg->conn->callback)
268      {
269          (*msg->conn->callback)(msg->conn, NETCONN_EVT_RCVPLUS, 0);
270          (*msg->conn->callback)(msg->conn, NETCONN_EVT_SENDPLUS, 0);
271      }
272      
273    if(msg->conn->mbox != SYS_MBOX_NULL) {    if(msg->conn->mbox != SYS_MBOX_NULL) {
274      sys_mbox_post(msg->conn->mbox, NULL);      sys_mbox_post(msg->conn->mbox, NULL);
275    }    }
# Line 417  do_listen(struct api_msg_msg *msg) Line 455  do_listen(struct api_msg_msg *msg)
455              break;              break;
456            }            }
457          }          }
458          tcp_arg(msg->conn->pcb.tcp, (void *)&(msg->conn->acceptmbox));          tcp_arg(msg->conn->pcb.tcp, msg->conn);
459          tcp_accept(msg->conn->pcb.tcp, accept_function);          tcp_accept(msg->conn->pcb.tcp, accept_function);
460        }        }
461        break;        break;
# Line 504  do_write(struct api_msg_msg *msg) Line 542  do_write(struct api_msg_msg *msg)
542          tcp_output(msg->conn->pcb.tcp);          tcp_output(msg->conn->pcb.tcp);
543        }        }
544        msg->conn->err = err;        msg->conn->err = err;
545          if (msg->conn->callback)
546              if (err == ERR_OK)
547              {
548                  if (tcp_sndbuf(msg->conn->pcb.tcp) <= TCP_SNDLOWAT)
549                      (*msg->conn->callback)(msg->conn, NETCONN_EVT_SENDMINUS, msg->msg.w.len);
550              }
551        break;        break;
552      }      }
553    }    }

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26