You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@trafficserver.apache.org by Heitor Ganzeli <he...@nic.br> on 2013/03/14 20:02:25 UTC

ATS Net connection

Hi all,

For a couple of weeks, I've been trying to develop a plugin capable of
doing some specific requests to other server. And, I'm still stuck. So
I'd like if anyone could help me with this plugin or give some guidance
on where to look for the answer.

the problem is as follow:

I'm on a Ubuntu 12.04 machine using traffic server 3.2.x from the git
repository and I'm trying to do something similar to the protocol plugin
which is included in the examples folder.
By now, could rightly start a connection via TSNetConnet and receive its
call back event, TS_EVENT_NET_CONNECT. However, when i try to write
something to the TSVConn objetc, via TSVConnWrite, it crashes.

the code is as follows:
    TxnSM *txn_sm = (TxnSM *) TSContDataGet(contp);
    struct sockaddr const* q_server_addr;
    struct sockaddr_in ip_addr;

    /* Get the server IP from data structure TSHostLookupResult. */
    q_server_addr = TSHostLookupResultAddrGet(host_info);

    memcpy(&ip_addr, q_server_addr, sizeof(ip_addr));
    ip_addr.sin_port = 80;
   
    txn_sm->q_pending_action = TSNetConnect(contp,
            (struct sockaddr const*) &ip_addr);
and, although port is set to 80, the request is made to the port 20480.
then, when it receives the TS_EVENT_NET_CONNECT event, the code is as
follows:

    TxnSM *txn_sm = (TxnSM *) TSContDataGet(contp);
    txn_sm->q_pending_action = NULL;
    txn_sm->q_server_vc = vc;

    TSIOBuffer bufp = TSIOBufferCreate();
    TSIOBufferReader bufp_reader = TSIOBufferReaderAlloc(bufp);

    TSIOBufferWrite(bufp, "test", strlen("test"));

    txn_sm->q_server_write_vio = TSVConnWrite(txn_sm->q_server_vc, contp,
            bufp_reader, strlen("teste"));

After this execution, the Continuation contp do not receive events call
back anymore.
The stack trace is below, but I con't think it is much of help:
/usr/local/bin/traffic_server(_ZN6HttpSM16do_hostdb_lookupEv+0xaa)[0x5271ea]
/usr/local/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x10b7)[0x538677]
/home/heitor/workspace/trafficserver/plugins/ptt-cache/ptt-cache.so(prepare_to_die+0x39)[0x2afb00206a99]
/usr/local/bin/traffic_server(_Z15write_to_net_ioP10NetHandlerP18UnixNetVConnectionP7EThread+0x12bc)[0x686f6c]
/usr/local/bin/traffic_server(_ZN10NetHandler12mainNetEventEiP5Event+0x293)[0x67d663]
/lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0)[0x2afae325fcb0]
/usr/local/bin/traffic_server(_ZN7EThread13process_eventEP5Eventi+0x90)[0x6ab570]
/usr/local/bin/traffic_server(_ZN15HostDBProcessor13getbyname_immEP12ContinuationMS0_FvP10HostDBInfoEPKciiii+0x8d)[0x5e217d]
/usr/local/bin/traffic_server(_ZN7EThread7executeEv+0x52c)[0x6ac06c]
/usr/local/bin/traffic_server(_ZN6HttpSM16do_hostdb_lookupEv+0xaa)[0x5271ea]
/usr/local/bin/traffic_server[0x6aa352]
/usr/local/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x10b7)[0x538677]
/home/heitor/workspace/trafficserver/plugins/ptt-cache/ptt-cache.so(prepare_to_die+0x39)[0x2afb00206a99]
/usr/local/bin/traffic_server(_Z15write_to_net_ioP10NetHandlerP18UnixNetVConnectionP7EThread+0x12bc)[0x686f6c]
/usr/local/bin/traffic_server(_ZN10NetHandler12mainNetEventEiP5Event+0x293)[0x67d663]
/usr/local/bin/traffic_server(_ZN7EThread13process_eventEP5Eventi+0x90)[0x6ab570]
/usr/local/bin/traffic_server(_ZN7EThread7executeEv+0x52c)[0x6ac06c]
/usr/local/bin/traffic_server[0x6aa352]

Furthermore, I've already tried some alternatives like the TSHttpConnect
but the result was simmilar

thanks in advance,

Regards,
Heitor Ganzeli





Re: ATS Net connection

Posted by Heitor Ganzeli <he...@nic.br>.
Hi James,

i've just converted tuo network byte order with the function:

server_port = htons(server_port);

and the code worked as expected

thanks again,
Heitor Ganzeli


On 03/19/2013 03:30 PM, James Peach wrote:
> On Mar 19, 2013, at 11:20 AM, Heitor Ganzeli <he...@nic.br> wrote:
>
>> hello,
>>
>> i've been trying to tackle this connection problem and came up with this minimal code to start a connection
>>     in_addr_t server_ip;
>>     int server_port;
>>     server_ip = (192 << 24) | (168 << 16) | (0 << 8) | (2);
>>     server_ip = htonl(server_ip);
>>     server_port = 80;
>>
>>     memset(&ip_addr, 0, sizeof(ip_addr));
>>     ip_addr.sin_family = AF_INET;
>>     ip_addr.sin_addr.s_addr = server_ip; /* Should be in network byte order */
>>     ip_addr.sin_port = server_port;
> sin_port should be in network byte order too.
>
>>
>>     txn_sm->q_pending_action = TSNetConnect(contp,
>>             (struct sockaddr const*) &ip_addr);
>>
>> but, despite trafficserver is already starting a connection, the port it connects is 20480 instead of 80 as specified in the code.
>> Does anyone know how to solve this problem? i've already tried to follow some example plugin codes but it seams I keep missing something in order for the request to work... 
>>
>>
>> thanks,
>> Heitor Ganzeli
>>
>>
>> On 03/14/2013 04:02 PM, Heitor Ganzeli wrote:
>>> Hi all,
>>>
>>> For a couple of weeks, I've been trying to develop a plugin capable of doing some specific requests to other server. And, I'm still stuck. So I'd like if anyone could help me with this plugin or give some guidance on where to look for the answer.
>>>
>>> the problem is as follow:
>>>
>>> I'm on a Ubuntu 12.04 machine using traffic server 3.2.x from the git repository and I'm trying to do something similar to the protocol plugin which is included in the examples folder.
>>> By now, could rightly start a connection via TSNetConnet and receive its call back event, TS_EVENT_NET_CONNECT. However, when i try to write something to the TSVConn objetc, via TSVConnWrite, it crashes.
>>>
>>> the code is as follows:
>>>     TxnSM *txn_sm = (TxnSM *) TSContDataGet(contp);
>>>     struct sockaddr const* q_server_addr;
>>>     struct sockaddr_in ip_addr;
>>>
>>>     /* Get the server IP from data structure TSHostLookupResult. */
>>>     q_server_addr = TSHostLookupResultAddrGet(host_info);
>>>
>>>     memcpy(&ip_addr, q_server_addr, sizeof(ip_addr));
>>>     ip_addr.sin_port = 80;
>>>     
>>>     txn_sm->q_pending_action = TSNetConnect(contp,
>>>             (struct sockaddr const*) &ip_addr);
>>> and, although port is set to 80, the request is made to the port 20480.
>>> then, when it receives the TS_EVENT_NET_CONNECT event, the code is as follows:
>>>
>>>     TxnSM *txn_sm = (TxnSM *) TSContDataGet(contp);
>>>     txn_sm->q_pending_action = NULL;
>>>     txn_sm->q_server_vc = vc;
>>>
>>>     TSIOBuffer bufp = TSIOBufferCreate();
>>>     TSIOBufferReader bufp_reader = TSIOBufferReaderAlloc(bufp);
>>>
>>>     TSIOBufferWrite(bufp, "test", strlen("test"));
>>>
>>>     txn_sm->q_server_write_vio = TSVConnWrite(txn_sm->q_server_vc, contp,
>>>             bufp_reader, strlen("teste"));
>>>
>>> After this execution, the Continuation contp do not receive events call back anymore.
>>> The stack trace is below, but I con't think it is much of help:
>>> /usr/local/bin/traffic_server(_ZN6HttpSM16do_hostdb_lookupEv+0xaa)[0x5271ea]
>>> /usr/local/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x10b7)[0x538677]
>>> /home/heitor/workspace/trafficserver/plugins/ptt-cache/ptt-cache.so(prepare_to_die+0x39)[0x2afb00206a99]
>>> /usr/local/bin/traffic_server(_Z15write_to_net_ioP10NetHandlerP18UnixNetVConnectionP7EThread+0x12bc)[0x686f6c]
>>> /usr/local/bin/traffic_server(_ZN10NetHandler12mainNetEventEiP5Event+0x293)[0x67d663]
>>> /lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0)[0x2afae325fcb0]
>>> /usr/local/bin/traffic_server(_ZN7EThread13process_eventEP5Eventi+0x90)[0x6ab570]
>>> /usr/local/bin/traffic_server(_ZN15HostDBProcessor13getbyname_immEP12ContinuationMS0_FvP10HostDBInfoEPKciiii+0x8d)[0x5e217d]
>>> /usr/local/bin/traffic_server(_ZN7EThread7executeEv+0x52c)[0x6ac06c]
>>> /usr/local/bin/traffic_server(_ZN6HttpSM16do_hostdb_lookupEv+0xaa)[0x5271ea]
>>> /usr/local/bin/traffic_server[0x6aa352]
>>> /usr/local/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x10b7)[0x538677]
>>> /home/heitor/workspace/trafficserver/plugins/ptt-cache/ptt-cache.so(prepare_to_die+0x39)[0x2afb00206a99]
>>> /usr/local/bin/traffic_server(_Z15write_to_net_ioP10NetHandlerP18UnixNetVConnectionP7EThread+0x12bc)[0x686f6c]
>>> /usr/local/bin/traffic_server(_ZN10NetHandler12mainNetEventEiP5Event+0x293)[0x67d663]
>>> /usr/local/bin/traffic_server(_ZN7EThread13process_eventEP5Eventi+0x90)[0x6ab570]
>>> /usr/local/bin/traffic_server(_ZN7EThread7executeEv+0x52c)[0x6ac06c]
>>> /usr/local/bin/traffic_server[0x6aa352]
>>>
>>> Furthermore, I've already tried some alternatives like the TSHttpConnect but the result was simmilar 
>>>
>>> thanks in advance,
>>>
>>> Regards,
>>> Heitor Ganzeli
>>>
>>>
>>>
>>>
>> <heitor.vcf>


Re: ATS Net connection

Posted by Heitor Ganzeli <he...@nic.br>.
hello,

i've been trying to tackle this connection problem and came up with this
minimal code to start a connection
    in_addr_t server_ip;
    int server_port;
    server_ip = (192 << 24) | (168 << 16) | (0 << 8) | (2);
    server_ip = htonl(server_ip);
    server_port = 80;

    memset(&ip_addr, 0, sizeof(ip_addr));
    ip_addr.sin_family = AF_INET;
    ip_addr.sin_addr.s_addr = server_ip; /* Should be in network byte
order */
    ip_addr.sin_port = server_port;


    txn_sm->q_pending_action = TSNetConnect(contp,
            (struct sockaddr const*) &ip_addr);

but, despite trafficserver is already starting a connection, the port it
connects is 20480 instead of 80 as specified in the code.
Does anyone know how to solve this problem? i've already tried to follow
some example plugin codes but it seams I keep missing something in order
for the request to work...


thanks,
Heitor Ganzeli


On 03/14/2013 04:02 PM, Heitor Ganzeli wrote:
> Hi all,
>
> For a couple of weeks, I've been trying to develop a plugin capable of
> doing some specific requests to other server. And, I'm still stuck. So
> I'd like if anyone could help me with this plugin or give some
> guidance on where to look for the answer.
>
> the problem is as follow:
>
> I'm on a Ubuntu 12.04 machine using traffic server 3.2.x from the git
> repository and I'm trying to do something similar to the protocol
> plugin which is included in the examples folder.
> By now, could rightly start a connection via TSNetConnet and receive
> its call back event, TS_EVENT_NET_CONNECT. However, when i try to
> write something to the TSVConn objetc, via TSVConnWrite, it crashes.
>
> the code is as follows:
>     TxnSM *txn_sm = (TxnSM *) TSContDataGet(contp);
>     struct sockaddr const* q_server_addr;
>     struct sockaddr_in ip_addr;
>
>     /* Get the server IP from data structure TSHostLookupResult. */
>     q_server_addr = TSHostLookupResultAddrGet(host_info);
>
>     memcpy(&ip_addr, q_server_addr, sizeof(ip_addr));
>     ip_addr.sin_port = 80;
>    
>     txn_sm->q_pending_action = TSNetConnect(contp,
>             (struct sockaddr const*) &ip_addr);
> and, although port is set to 80, the request is made to the port 20480.
> then, when it receives the TS_EVENT_NET_CONNECT event, the code is as
> follows:
>
>     TxnSM *txn_sm = (TxnSM *) TSContDataGet(contp);
>     txn_sm->q_pending_action = NULL;
>     txn_sm->q_server_vc = vc;
>
>     TSIOBuffer bufp = TSIOBufferCreate();
>     TSIOBufferReader bufp_reader = TSIOBufferReaderAlloc(bufp);
>
>     TSIOBufferWrite(bufp, "test", strlen("test"));
>
>     txn_sm->q_server_write_vio = TSVConnWrite(txn_sm->q_server_vc, contp,
>             bufp_reader, strlen("teste"));
>
> After this execution, the Continuation contp do not receive events
> call back anymore.
> The stack trace is below, but I con't think it is much of help:
> /usr/local/bin/traffic_server(_ZN6HttpSM16do_hostdb_lookupEv+0xaa)[0x5271ea]
> /usr/local/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x10b7)[0x538677]
> /home/heitor/workspace/trafficserver/plugins/ptt-cache/ptt-cache.so(prepare_to_die+0x39)[0x2afb00206a99]
> /usr/local/bin/traffic_server(_Z15write_to_net_ioP10NetHandlerP18UnixNetVConnectionP7EThread+0x12bc)[0x686f6c]
> /usr/local/bin/traffic_server(_ZN10NetHandler12mainNetEventEiP5Event+0x293)[0x67d663]
> /lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0)[0x2afae325fcb0]
> /usr/local/bin/traffic_server(_ZN7EThread13process_eventEP5Eventi+0x90)[0x6ab570]
> /usr/local/bin/traffic_server(_ZN15HostDBProcessor13getbyname_immEP12ContinuationMS0_FvP10HostDBInfoEPKciiii+0x8d)[0x5e217d]
> /usr/local/bin/traffic_server(_ZN7EThread7executeEv+0x52c)[0x6ac06c]
> /usr/local/bin/traffic_server(_ZN6HttpSM16do_hostdb_lookupEv+0xaa)[0x5271ea]
> /usr/local/bin/traffic_server[0x6aa352]
> /usr/local/bin/traffic_server(_ZN6HttpSM14set_next_stateEv+0x10b7)[0x538677]
> /home/heitor/workspace/trafficserver/plugins/ptt-cache/ptt-cache.so(prepare_to_die+0x39)[0x2afb00206a99]
> /usr/local/bin/traffic_server(_Z15write_to_net_ioP10NetHandlerP18UnixNetVConnectionP7EThread+0x12bc)[0x686f6c]
> /usr/local/bin/traffic_server(_ZN10NetHandler12mainNetEventEiP5Event+0x293)[0x67d663]
> /usr/local/bin/traffic_server(_ZN7EThread13process_eventEP5Eventi+0x90)[0x6ab570]
> /usr/local/bin/traffic_server(_ZN7EThread7executeEv+0x52c)[0x6ac06c]
> /usr/local/bin/traffic_server[0x6aa352]
>
> Furthermore, I've already tried some alternatives like the
> TSHttpConnect but the result was simmilar
>
> thanks in advance,
>
> Regards,
> Heitor Ganzeli
>
>
>
>