http client over PPP skips request

Hello,

I’m working on a project with a RCM3700, DC 9.62 and a wavecom fasttrack modem on serial D.

Approximately 6 out of 10 times I send a httpc_get request it fails.
In the logs it seems the only difference is the actual HTTP request is not being sent.

I’ve been looking for a solution for about two weeks now, I put all the httpc and modem code in a separate test program to exclude all other factors. Down to 250 lines of code and still the same problem. I hope someone can help me get back on track.

Besides extracting all the code I tried to replace these components:
-SIM-card
-Modem (about 6 different ones)
-Rabbit
-Rabbit-hold-board

All combinations gave the same errors, so i’m quite sure the problem lies in the software.

I have the following questions:
1 - Is there any more debug info I can turn on, I have PPP, PPPLINK and CHAT + _VERBOSE and IFS_DEBUG = 6.
2 - My predecessor had in the ifconfig for hangup “+++”. When i looked at the logging I noticed this gives 3 times “+++” on each up-down cycle. So I changed it to ATH, is this correct?
3 - What am I doing wrong that it doesnt work 100% of the time?

Here is the outline of my program:

Configure modem with AT:
-Reset modem (AT+CFUN=1)
-Check flow control (AT+IFC? must return 0,0)
-Check character framing (AT+ICF? must return 3,4)
-Set pin
-Set CGDCONT (AT+CGDCONT? must return 1,“IP”,“internet”)

When this is done I set up the IF_PPP3

ifconfig(IF_PPP3, 
IFS_DEBUG, 6, 
IFS_PPP_SPEED, MODEM_SPEED, // = 38400L
IFS_PPP_RTSPIN, PCDR, NULL, 0, 
IFS_PPP_CTSPIN, PCDR, 1, 
IFS_PPP_FLOWCONTROL, 0, 
IFS_PPP_SENDEXPECT, "'ATD *99***1#\r' 'CONNECT 38400'", 
IFS_PPP_HANGUP, "ATH", 
IFS_PPP_MODEMESCAPE, 1, 
IFS_PPP_ACCEPTIP, 1, 
IFS_PPP_ACCEPTDNS, 1,
IFS_PPP_REMOTEAUTH, "username", "password", 
IFS_UP, 
IFS_END);

When the interface successfully came up I send the request:

err = httpc_init_if (&hsock, &tsock, IF_PPP3);
if (err) return err;

err = httpc_get(&hsock, SERVER_IP_STR, SERVER_PORT, file, NULL);
if (err) return err;
   
err = httpc_skip_headers(&hsock, 0);
if (err < 0) return err; 

// read body and  close connection

The last function call, httpc_skip_headers() is where it goes wrong.
The function returns -1 with the socket error:
Remote peer reset connection

A full piece of logging from a failed request:

PPPLINK: sendpacket totlen=45 i/f 0                                             
PPPLINK: sendpacket using 0000BCD8                                              
--- pkt flags=x40 i/f=0 tstamp=31512 len=45 ---                                 
  sect 1, len=45 addr=x80055A5A rlen=1481                                       
21 45 00 00 2C 00 06 00 00 40 06 32 CA 5E 9D 48   !E  ,    @ 2 ^ H              
A9 52 CC 4D EA 04 01 CC DC 11 B8 00 00 00 00 00    R M                          
00 60 02 08 00 65 94 00 00 02 04 05 B4             `   e                        
PPPLINK: transmitter was idle                                                   
PPPLINK: receive processed 1 chars                                              
PPPLINK: receive processed 48 chars                                             
PPP: got packet BCD8 on i/f:0 protocol:0x21                                     
PPPLINK: sendpacket totlen=42 i/f 0                                             
PPPLINK: sendpacket using 0000BCA1                                              
--- pkt flags=x40 i/f=0 tstamp=15297 len=42 ---                                 
  sect 1, len=41 addr=x80055464 rlen=1485                                       
21 45 00 00 29 00 07 00 00 40 06 32 CC 5E 9D 48   !E  )    @ 2 ^ H              
A9 52 CC 4D EA 04 01 CC DC 11 B8 00 01 01 91 05    R M                          
B5 50 18 08 00 2E F2 00 00                         P   .                        
  sect 2, len=1 addr=x00051C64 rlen=0                                           
47                                                G                             
PPPLINK: transmitter was idle                                                   
PPPLINK: receive processed 1 chars                                              
PPPLINK: receive processed 4 chars                                              
PPP: got packet BCD8 on i/f:0 protocol:0x21                                     
error -1 calling httpc_skip_headers()                                           
Socket error:Remote peer reset connection 

and finally a piece of logging from a successful request:

PPPLINK: sendpacket totlen=45 i/f 0                                             
PPPLINK: sendpacket using 0000BD0F                                              
--- pkt flags=x40 i/f=0 tstamp=5230 len=45 ---                                  
  sect 1, len=45 addr=x80056050 rlen=1481                                       
21 45 00 00 2C 00 01 00 00 40 06 C1 80 B2 E3 65   !E  ,    @     e              
B1 52 CC 4D EA 04 00 CC DC FF 66 00 00 00 00 00    R M      f                   
00 60 02 08 00 06 98 00 00 02 04 05 B4             `                            
PPPLINK: transmitter was idle                                                   
PPPLINK: receive processed 1 chars                                              
PPPLINK: receive processed 18 chars                                             
PPP: got packet BD0F on i/f:0 protocol:0x21                                     
PPPLINK: sendpacket totlen=133 i/f 0                                            
PPPLINK: sendpacket using 0000BCD8                                              
--- pkt flags=x40 i/f=0 tstamp=42230 len=133 ---                                
  sect 1, len=41 addr=x80055A5A rlen=1485                                       
21 45 00 00 84 00 02 00 00 40 06 C1 27 B2 E3 65   !E       @  '  e              
B1 52 CC 4D EA 04 00 CC DC FF 66 00 01 8A BD D8    R M      f                   
56 50 18 08 00 93 F4 00 00                        VP                            
  sect 2, len=92 addr=x00051C64 rlen=0                                          
REQUEST PACKET CONTENTS                      
PPPLINK: transmitter was idle                                                   
PPPLINK: receive processed 1 chars                                              
PPPLINK: receive processed 100 chars                                            
PPPLINK: receive processed 112 chars                                            
PPP: got packet BD0F on i/f:0 protocol:0x21                                     
PPPLINK: receive processed 65 chars                                             
PPP: got packet BCD8 on i/f:0 protocol:0x21                                     
PPPLINK: sendpacket totlen=41 i/f 0                                             
PPPLINK: sendpacket using 0000BCA1                                              
--- pkt flags=x40 i/f=0 tstamp=42225 len=41 ---                                 
  sect 1, len=41 addr=x80055464 rlen=1485                                       
21 45 00 00 28 00 03 00 00 40 06 C1 82 B2 E3 65   !E  (    @     e              
B1 52 CC 4D EA 04 00 CC DC FF 66 00 5D 8A BD D9    R M      f ]                 
7D 50 10 06 EA BA C3 00 00                        }P                            
PPPLINK: transmitter was idle                                                   
PPP: got packet BD0F on i/f:0 protocol:0x21                                     
PPPLINK: sendpacket totlen=41 i/f 0                                             
PPPLINK: sendpacket using 0000BCD8                                              
--- pkt flags=x40 i/f=0 tstamp=47277 len=41 ---                                 
  sect 1, len=41 addr=x80055A5A rlen=1485                                       
21 45 00 00 28 00 04 00 00 40 06 C1 81 B2 E3 65   !E  (    @     e              
B1 52 CC 4D EA 04 00 CC DC FF 66 00 5D 8A BD D9    R M      f ]                 
7E 50 10 06 EA BA C2 00 00                        ~P                            
PPPLINK: transmitter was idle                                                   
PPPLINK: sendpacket totlen=41 i/f 0                                             
PPPLINK: sendpacket using 0000BD0F                                              
--- pkt flags=x40 i/f=0 tstamp=47288 len=41 ---                                 
  sect 1, len=41 addr=x80056050 rlen=1485                                       
21 45 00 00 28 00 05 00 00 40 06 C1 80 B2 E3 65   !E  (    @     e              
B1 52 CC 4D EA 04 00 CC DC FF 66 00 5D 8A BD D9    R M      f ]                 
7E 50 11 08 00 B9 AB 00 00                        ~P                            
PPPLINK: transmitter was idle                                                   
PPPLINK: receive processed 1 chars                                              
PPPLINK: receive processed 45 chars                                             
PPP: got packet BD0F on i/f:0 protocol:0x21                                     
Return data: XML

Last but not least I tried playing around with the following timeout-defines, but without any luck:

#define DINBUFSIZE  255
#define DOUTBUFSIZE 255
#define URL_MAX_BUFFER_SIZE 1024
#define HTTP_MAX_BUFFER 1024
#define MAX_BUFFER_NET_SIZE 1024
#define MAXFORM_SIZE 64

#define TCP_OPENTIMEOUT 62000L   // timeout for active opens
#define TCP_CONNTIMEOUT 26000L   // timeout during open or close negotiation
#define TCP_SYNQTIMEOUT 180000L   // timeout for pending connection
#define TCP_TWTIMEOUT 4000L

#define PSS_SENDBUF_SIZE 100

#define PPP_TIMEOUT		6000
#define CHAT_MAXLEN		60
#define CHAT_MAXSENDLEN 256

Hopefully someone is able to see whats going wrong here.
Thanks for reading.

Kind regards,

Gert-Jan

edit 1 : typo
edit 2 : Added concrete questions