Changeset 148 for uKadecot/trunk/uip


Ignore:
Timestamp:
Jan 8, 2016, 2:35:52 PM (8 years ago)
Author:
coas-nagasima
Message:

メッセージバッファ領域がなくなったときにWebSocketパケットを誤って処理してしまうのを修正。
Ethernet送信バッファが取れないときにパケットが送信できなかったのを修正。
その他、処理の安定性の向上。

Location:
uKadecot/trunk/uip
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • uKadecot/trunk/uip/apps/webserver/websocket.c

    r108 r148  
    127127                // Payload buffer
    128128                default:
    129                         _ecn_fbs_poke(ws->cur_in_msg, s->data_pos, *pos ^ s->masking_key[s->data_pos % 4]);
     129                        if(ws->cur_in_msg.ptr != NULL)
     130                                _ecn_fbs_poke(ws->cur_in_msg, s->data_pos, *pos ^ s->masking_key[s->data_pos % 4]);
    130131
    131132                        s->data_pos++;
     
    133134                                ER ret;
    134135                                s->state = 0;
    135                                 ((ID *)ws->cur_in_msg.ptr->_gap)[0] = ws->wbsid;
    136                                 ret = psnd_dtq(ecn_api_mailboxid, (intptr_t)ws->cur_in_msg.ptr);
    137                                 if (ret != E_OK) {
    138                                         syslog(LOG_WARNING, "websocket_input() : psnd_dtq(%d) result = %d", ecn_api_mailboxid, ret);
    139                                         _ecn_fbs_del(ws->cur_in_msg);
     136
     137                                if (ws->cur_in_msg.ptr != NULL) {
     138                                        ((ID *)ws->cur_in_msg.ptr->_gap)[0] = ws->wbsid;
     139                                        ret = psnd_dtq(ecn_api_mailboxid, (intptr_t)ws->cur_in_msg.ptr);
     140                                        if (ret != E_OK) {
     141                                                syslog(LOG_WARNING, "websocket_input() : psnd_dtq(%d) result = %d", ecn_api_mailboxid, ret);
     142                                                _ecn_fbs_del(ws->cur_in_msg);
     143                                        }
    140144                                }
    141145                                memset(&ws->cur_in_msg, 0, sizeof(ws->cur_in_msg));
  • uKadecot/trunk/uip/target/if_rx62n/if_rx62n.c

    r108 r148  
    378378 */
    379379
    380 void
     380bool_t
    381381rx62n_start (T_IF_SOFTC *ic, void *output, int size)
    382382{
     
    391391
    392392                if (desc->tact != 0) {
    393                         break;
     393                        return false;
    394394                }
    395395
     
    423423                sil_wrw_mem(EDMAC_EDTRR, EDMAC_EDTRR_TR);
    424424        }
     425
     426        return true;
    425427}
    426428
     
    435437        T_RX62N_SOFTC *sc;
    436438        uint32_t ecsr, eesr, psr;
    437         bool_t acttsk;
     439        bool_t acttsk = false;
    438440
    439441        i_begin_int(INTNO_IF_RX62N_TRX);
  • uKadecot/trunk/uip/target/if_rx62n/if_rx62n.h

    r108 r148  
    6060 */
    6161
    62 #define NUM_IF_RX62N_TXBUF              8       /* 送信バッファ数                      */
     62#define NUM_IF_RX62N_TXBUF              2       /* 送信バッファ数                      */
    6363#define NUM_IF_RX62N_RXBUF              8       /* 受信バッファ数                      */
    6464#define IF_RX62N_BUF_PAGE_SIZE  1518    /* バッファサイズ */
     
    120120extern bool_t rx62n_link(T_IF_SOFTC *ic);
    121121extern int rx62n_read(T_IF_SOFTC *ic, void **input);
    122 extern void rx62n_start(T_IF_SOFTC *ic, void *output, int size);
     122extern bool_t rx62n_start(T_IF_SOFTC *ic, void *output, int size);
    123123extern ER rx62n_addmulti(T_IF_SOFTC *ic);
    124124extern void if_rx62n_trx_handler(void);
  • uKadecot/trunk/uip/task/uip_task.c

    r125 r148  
    9898        T_IF_SOFTC      *ic = IF_ETHER_NIC_GET_SOFTC();
    9999        int ret;
     100        bool_t tx;
    100101
    101102        PT_BEGIN(&uiptsk->pt);
     
    124125
    125126                PT_WAIT_UNTIL(&uiptsk->pt, (ret = ic->link_pre != ic->link_now ? 1 :
    126                         (ic->rxb_read != ic->rxb_write ? 2 :
    127127                        (uip_out_buf[uip_out_rpos].len > 0 ? 3 :
    128128                        (ws_out_req != ws_out_res ? 4 :
    129                         (timer_expired(&uiptsk->periodic_timer) ? 5 : 0))))) != 0);
     129                        (timer_expired(&uiptsk->periodic_timer) ? 5 :
     130                        (ic->rxb_read != ic->rxb_write ? 2 : 0))))) != 0);
    130131
    131132                if(ret == 1){
     
    146147                                                if (uip_len > 0) {
    147148                                                        uip_arp_out();
    148                                                         IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     149                                                        for (;;) {
     150                                                                tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     151                                                                if (tx)
     152                                                                        break;
     153                                                                PT_YIELD(&uiptsk->pt);
     154                                                        }
    149155                                                }
    150156                                        }
     
    174180                                        if (uip_len > 0) {
    175181                                                uip_arp_out();
    176                                                 IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     182                                                for (;;) {
     183                                                        tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     184                                                        if (tx)
     185                                                                break;
     186                                                        PT_YIELD(&uiptsk->pt);
     187                                                }
    177188                                                PT_YIELD(&uiptsk->pt);
    178189                                                continue;
     
    185196                                           uip_len is set to a value > 0. */
    186197                                        if (uip_len > 0) {
    187                                                 IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     198                                                for (;;) {
     199                                                        tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     200                                                        if (tx)
     201                                                                break;
     202                                                        PT_YIELD(&uiptsk->pt);
     203                                                }
    188204                                                PT_YIELD(&uiptsk->pt);
    189205                                                continue;
     
    204220                        uip_udp_send(buf->len);
    205221
    206                         buf->len = 0;
    207                         uip_out_rpos++;
    208                         if (uip_out_rpos >= UIP_BUF_COUNT)
    209                                 uip_out_rpos = 0;
    210 
    211222                        uip_udp_conn = cepid;
    212223                        uip_process(UIP_UDP_SEND_CONN);
     
    214225                        cepid->rport = 0;
    215226                        uip_arp_out();
    216                         IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     227                        for (;;) {
     228                                tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     229                                if (tx)
     230                                        break;
     231                                PT_YIELD(&uiptsk->pt);
     232                        }
     233
     234                        buf = &uip_out_buf[uip_out_rpos];
     235                        uip_out_rpos++;
     236                        if (uip_out_rpos >= UIP_BUF_COUNT)
     237                                uip_out_rpos = 0;
     238                        buf->len = 0;
     239
    217240                        PT_YIELD(&uiptsk->pt);
    218241                        continue;
     
    231254                                if (uip_len > 0) {
    232255                                        uip_arp_out();
    233                                         IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     256                                        for (;;) {
     257                                                tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     258                                                if (tx)
     259                                                        break;
     260                                                PT_YIELD(&uiptsk->pt);
     261                                        }
    234262                                        PT_YIELD(&uiptsk->pt);
    235263                                }
     
    247275                                if (uip_len > 0) {
    248276                                        uip_arp_out();
    249                                         IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     277                                        for (;;) {
     278                                                tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     279                                                if (tx)
     280                                                        break;
     281                                                PT_YIELD(&uiptsk->pt);
     282                                        }
    250283                                        PT_YIELD(&uiptsk->pt);
    251284                                }
     
    261294                                if (uip_len > 0) {
    262295                                        uip_arp_out();
    263                                         IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     296                                        for (;;) {
     297                                                tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
     298                                                if (tx)
     299                                                        break;
     300                                                PT_YIELD(&uiptsk->pt);
     301                                        }
    264302                                        PT_YIELD(&uiptsk->pt);
    265303                                }
Note: See TracChangeset for help on using the changeset viewer.