Beispiel #1
0
        private static void Error(object arg, err_t err)
        {
            TcpCep _this = (TcpCep)arg;

            Task wtask = null;

            foreach (Task task in _this.m_SendTaskQueue)
            {
                if ((task.rtsk.tskwait != TSKWAIT.TTW_TCP) ||
                    (task.rtsk.wid != _this.m_CepID))
                {
                    continue;
                }

                wtask = task;
                break;
            }

            bool ok = false;

            if (wtask != null)
            {
                ok = wtask.ReleaseWait();
            }

            if (_this.m_TPcb != null)
            {
                _this.m_lwIP.tcp.tcp_close(_this.m_TPcb);
            }
        }
Beispiel #2
0
        private static err_t Connected(object arg, tcp_pcb tpcb, err_t err)
        {
            TcpCep _this = (TcpCep)arg;

            if (err != err_t.ERR_OK)
            {
                err = _this.m_lwIP.tcp.tcp_close(tpcb);
                return(err);
            }

            Task wtask = null;

            foreach (Task task in _this.m_SendTaskQueue)
            {
                if ((task.rtsk.tskwait != TSKWAIT.TTW_TCP) ||
                    (task.rtsk.wid != _this.m_CepID))
                {
                    continue;
                }

                wtask = task;
                break;
            }

            if (wtask != null)
            {
                _this.m_SendTaskQueue.Remove(wtask);

                _this.NewSession(tpcb);
                wtask.ReleaseWait();
            }

            return(err_t.ERR_OK);
        }
Beispiel #3
0
        public ER Close(TMO tmout)
        {
            err_t err = m_lwIP.tcp.tcp_close(m_Pcb);

            if (err == err_t.ERR_OK)
            {
                return(ER.E_OK);
            }
            else
            {
                return(ER.E_OBJ);
            }
        }
Beispiel #4
0
        private err_t SentData(object arg, tcp_pcb tpcb, ushort space)
        {
            err_t   err  = err_t.ERR_OK;
            int     rest = space;
            int     pos  = m_SendPos;
            pointer buf  = m_SendPBuf;
            int     len  = m_SendLen;

            if (buf != null)
            {
                int tmp = rest;
                if (tmp > len)
                {
                    tmp = len;
                }

                err = m_lwIP.tcp.tcp_write(m_TPcb, new pointer(buf, pos), (ushort)tmp, 0);
                if (err != err_t.ERR_OK)
                {
                    return(err);
                }

                pos  += tmp;
                rest -= tmp;
                if (pos == len)
                {
                    pos = 0;
                    buf = null;
                    len = 0;
                }
            }

            m_SendPBuf = buf;
            m_SendPos  = pos;
            m_SendLen  = len;

            if ((m_SendPBuf == null) && (rest > 0))
            {
                if (m_SendTaskQueue.First != null)
                {
                    Task task = m_SendTaskQueue.First.Value;
                    m_SendTaskQueue.RemoveFirst();

                    task.ReleaseWait();
                }
            }

            return(err);
        }
Beispiel #5
0
        private static err_t Accepting(object arg, tcp_pcb newpcb, err_t err)
        {
            TcpRep _this = (TcpRep)arg;

            _this.m_TcpCep.NewSession(newpcb);

            _this.m_AcceptQueue.AddLast(newpcb);

            if (_this.m_TskQueue.First != null)
            {
                Task task = _this.m_TskQueue.First.Value;
                _this.m_TskQueue.RemoveFirst();

                if (!task.ReleaseWait())
                {
                    return(err_t.ERR_WOULDBLOCK);
                }
            }

            return(err);
        }
Beispiel #6
0
        private static err_t RecvData(object arg, tcp_pcb tpcb, pbuf p, err_t err)
        {
            TcpCep _this = (TcpCep)arg;

            if (p == null)
            {
                _this.NetworkToHost(null);
                return(err_t.ERR_OK);
            }

            if (err != err_t.ERR_OK)
            {
                _this.m_lwIP.pbuf_free(p);
                return(err);
            }

            _this.NetworkToHost(p);

            _this.m_lwIP.tcp.tcp_recved(tpcb, p.tot_len);

            return(err_t.ERR_OK);
        }
Beispiel #7
0
 /**
  * Convert an lwip internal error to a pointer representation.
  *
  * @param err an lwip internal err_t
  * @return a pointer representation for err
  */
 public static string lwip_strerr(err_t err)
 {
     return err_strerr[-(int)err];
 }
Beispiel #8
0
 public static bool ERR_IS_FATAL(err_t e)
 {
     return ((e) < err_t.ERR_ISCONN);
 }
Beispiel #9
0
 public err_t lwip_tcp_event(object arg, tcp_pcb pcb, lwip_event e, pbuf p, ushort size, err_t err)
 {
     return _lwip_tcp_event(arg, pcb, e, p, size, err);
 }
Beispiel #10
0
 public static bool ERR_IS_FATAL(err_t e)
 {
     return((e) < err_t.ERR_ISCONN);
 }
Beispiel #11
0
 /**
  * Convert an lwip internal error to a pointer representation.
  *
  * @param err an lwip internal err_t
  * @return a pointer representation for err
  */
 public static string lwip_strerr(err_t err)
 {
     return(err_strerr[-(int)err]);
 }