Re: [lwip-users] Raw lwIP server write issue

2015-11-07 Thread Valery Ushakov
Amit Ashara  wrote:

> Do you mean that instead of using pcb I should have another tcp_pcb e,g,
> newpcb that is assigned from the pcb in the call back.
> 
> struct tcp_pcb *newpcb;
> 
> static err_t echo_accept(void *arg, struct tcp_pcb *pcb, err_t err)
> 
> {
>   LWIP_UNUSED_ARG(arg);
>   LWIP_UNUSED_ARG(err);
> 
>   newpcb = pcb;

Exactly.


> On Thu, Nov 5, 2015 at 11:28 AM, Valery Ushakov  wrote:
> 
>> Amit Ashara  wrote:
>>
>> > When a connection is established between the server and the client,
>> > I can use the tcp_write on the client side to send data in my
>> > application code.  However the same on the server side is not
>> > possible.  The pcb that has been used for the server only contains
>> > the server's address and server's port but not the client's address
>> > and client's port.  In the receive call back on the server side, I
>> > can send the data to the client but not outside of the call back.
>>
>> You are using wrong pcb.  On the server you start with a listening
>> pcb.  When your accept callback is called, it's passed a *new* pcb,
>> that represents the established connection.  You should use that pcb
>> for tcp_write.  Writing from receive callback works because in the
>> receive callback the pcb argument is that connection pcb, not the
>> original listening pcb.
>>
>> -uwe

-uwe


___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users


Re: [lwip-users] Raw lwIP server write issue

2015-11-07 Thread Amit Ashara
Thanks Uwe.

On Fri, Nov 6, 2015 at 5:17 PM, Valery Ushakov  wrote:

> Amit Ashara  wrote:
>
> > Do you mean that instead of using pcb I should have another tcp_pcb e,g,
> > newpcb that is assigned from the pcb in the call back.
> >
> > struct tcp_pcb *newpcb;
> >
> > static err_t echo_accept(void *arg, struct tcp_pcb *pcb, err_t err)
> >
> > {
> >   LWIP_UNUSED_ARG(arg);
> >   LWIP_UNUSED_ARG(err);
> >
> >   newpcb = pcb;
>
> Exactly.
>
>
> > On Thu, Nov 5, 2015 at 11:28 AM, Valery Ushakov 
> wrote:
> >
> >> Amit Ashara  wrote:
> >>
> >> > When a connection is established between the server and the client,
> >> > I can use the tcp_write on the client side to send data in my
> >> > application code.  However the same on the server side is not
> >> > possible.  The pcb that has been used for the server only contains
> >> > the server's address and server's port but not the client's address
> >> > and client's port.  In the receive call back on the server side, I
> >> > can send the data to the client but not outside of the call back.
> >>
> >> You are using wrong pcb.  On the server you start with a listening
> >> pcb.  When your accept callback is called, it's passed a *new* pcb,
> >> that represents the established connection.  You should use that pcb
> >> for tcp_write.  Writing from receive callback works because in the
> >> receive callback the pcb argument is that connection pcb, not the
> >> original listening pcb.
> >>
> >> -uwe
>
> -uwe
>
>
> ___
> lwip-users mailing list
> lwip-users@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/lwip-users
>
___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Re: [lwip-users] Raw lwIP server write issue

2015-11-05 Thread Valery Ushakov
Amit Ashara  wrote:

> When a connection is established between the server and the client,
> I can use the tcp_write on the client side to send data in my
> application code.  However the same on the server side is not
> possible.  The pcb that has been used for the server only contains
> the server's address and server's port but not the client's address
> and client's port.  In the receive call back on the server side, I
> can send the data to the client but not outside of the call back.

You are using wrong pcb.  On the server you start with a listening
pcb.  When your accept callback is called, it's passed a *new* pcb,
that represents the established connection.  You should use that pcb
for tcp_write.  Writing from receive callback works because in the
receive callback the pcb argument is that connection pcb, not the
original listening pcb.

-uwe


___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users


Re: [lwip-users] Raw lwIP server write issue

2015-11-05 Thread Amit Ashara
Hello Uwe,

I have the call back for accept set as follows.

In the main application, I call echo_accept.

server_tpcb = tcp_new();
ui32Err = tcp_bind(server_tpcb, (ip_addr_t
*)_ui32IPAddress, NODE_TCP_SERVER_PORT);
UARTprintf("\n%d",ui32Err);
server_tpcb = tcp_listen(server_tpcb);
tcp_accept(server_tpcb, echo_accept);

which is as follows.

static err_t echo_accept(void *arg, struct tcp_pcb *pcb, err_t err)

{
  LWIP_UNUSED_ARG(arg);
  LWIP_UNUSED_ARG(err);

  tcp_setprio(pcb, TCP_PRIO_MIN);
  tcp_arg(pcb, NULL);
  tcp_recv(pcb, echo_recv);
  tcp_err(pcb, echo_err);
  tcp_poll(pcb, NULL, 0);
  return ERR_OK;
}

Do you mean that instead of using pcb I should have another tcp_pcb e,g,
newpcb that is assigned from the pcb in the call back.

struct tcp_pcb *newpcb;

static err_t echo_accept(void *arg, struct tcp_pcb *pcb, err_t err)

{
  LWIP_UNUSED_ARG(arg);
  LWIP_UNUSED_ARG(err);

  newpcb = pcb;

  tcp_setprio(pcb, TCP_PRIO_MIN);
  tcp_arg(pcb, NULL);
  tcp_recv(pcb, echo_recv);
  tcp_err(pcb, echo_err);
  tcp_poll(pcb, NULL, 0);
  return ERR_OK;
}

Regards
Amit

On Thu, Nov 5, 2015 at 11:28 AM, Valery Ushakov  wrote:

> Amit Ashara  wrote:
>
> > When a connection is established between the server and the client,
> > I can use the tcp_write on the client side to send data in my
> > application code.  However the same on the server side is not
> > possible.  The pcb that has been used for the server only contains
> > the server's address and server's port but not the client's address
> > and client's port.  In the receive call back on the server side, I
> > can send the data to the client but not outside of the call back.
>
> You are using wrong pcb.  On the server you start with a listening
> pcb.  When your accept callback is called, it's passed a *new* pcb,
> that represents the established connection.  You should use that pcb
> for tcp_write.  Writing from receive callback works because in the
> receive callback the pcb argument is that connection pcb, not the
> original listening pcb.
>
> -uwe
>
>
> ___
> lwip-users mailing list
> lwip-users@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/lwip-users
>
___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

[lwip-users] Raw lwIP server write issue

2015-11-05 Thread Amit Ashara
Hello All,

I am using Raw lwIP 1.4.1 on a microcontroller. Since the requirement is to
have acknowledged transfer between two devices, I created a server and
client model. However I ran into an issue.

When a connection is established between the server and the client, I can
use the tcp_write on the client side to send data in my application code.
However the same on the server side is not possible. The pcb that has been
used for the server only contains the server's address and server's port
but not the client's address and client's port. In the receive call back on
the server side, I can send the data to the client but not outside of the
call back.

Since I know that at any point only one client can communicate with a
server, so

1. Is the server client model in TCP/IP the correct choice, or is there
some other model like a peer-2-peer that I should be using
2. If the server client model is correct, then how do I do a tcp_write
outside the scope of a call back.

Regards
Amit
___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users