 I am using the below code for packing the data in iso 8583 format
00 2E 60 01 23 06 00 08 00 20 20 01 00 00 c0 00
00 92 00 00 00 00 12 01 23 48 30 30 30 30 30 30
39 53 31 30 30 30 30 30 30 30 30 30 30 30 30 35
#include <WS2tcpip.h>
#include <stdio.h>
#include <stdlib.h>
#include <WinSock.h>
#include <wchar.h>
#include <string.h>
char cHexDigit_to_Nibble1(unsigned char c)
{
if(!isxdigit(c))
return (0);
if(isdigit(c))
return (c - '0');
c = toupper(c);
return (c - 55);
}
void vAscii2BCD(unsigned char *pucSrc, unsigned char *pucDst, int inSize)
{
for (; inSize > 0; inSize -= 2, pucDst++)
{
if(!memcmp(pucSrc, "3D", 2))
{
pucSrc += 2;
*pucDst = '=';
}
else
{
*pucDst = cHexDigit_to_Nibble1(*pucSrc++) << 4;
*pucDst |= cHexDigit_to_Nibble1(*pucSrc++);
}
}
printf("data is %s\n\n",pucDst);
}
int main()
{
int sock_desc, status;
struct sockaddr_in client;
struct addrinfo hints;
WSADATA Data;
int bytesSent;
int bytesRecv = SOCKET_ERROR;
unsigned char *pucSrc = (unsigned char*) malloc (100) ;
unsigned char *pucDst = (unsigned char*) malloc (256) ;
memset(pucSrc,0,256);
memset(pucDst,0,256);
vAscii2BCD((unsigned char*)"00" ,pucDst, 1) ;strcpy((char*)pucSrc,(char*)pucDst) ;
memset(pucDst,0,256);
vAscii2BCD((unsigned char*)"2E" ,pucDst, 1) ;strcat((char*)pucSrc,(char*)pucDst) ;
memset(pucDst,0,256);
vAscii2BCD((unsigned char*)"6001230600" ,pucDst, 5) ;strcat((char*)pucSrc,(char*)pucDst) ;
memset(pucDst,0,256);
vAscii2BCD((unsigned char*)"0800" ,pucDst, 2) ;strcat((char*)pucSrc,(char*)pucDst);
memset(pucDst,0,256);
vAscii2BCD((unsigned char*)"2020010000" ,pucDst, 5) ;
strcat((char*)pucSrc,(char*)pucDst);
memset(pucDst,0,256);
vAscii2BCD((unsigned char*)"C00000" ,pucDst, 3) ;
strcat((char*)pucSrc,(char*)pucDst);
memset(pucDst,0,256);
vAscii2BCD((unsigned char*)"920000" ,pucDst, 3) ;
strcat((char*)pucSrc,(char*)pucDst);
printf("size of pucSrc = %d\n", strlen((char*)pucSrc));
vAscii2BCD((unsigned char*) "0000" ,pucDst, 2) ;
strcat((char*)pucSrc,(char*)pucDst) ;
printf("size of pucSrc = %d\n", strlen((char*)pucSrc));
memset(pucDst,0,256);
vAscii2BCD((unsigned char*) "12" ,pucDst, 1) ;strcat((char*)pucSrc,(char*)pucDst) ;
memset(pucDst,0,256);
vAscii2BCD((unsigned char*)"0123" ,pucDst, 3) ;strcat((char*)pucSrc,(char*)pucDst) ;
strcat((char*)pucSrc,"H0000009S10000000000005");
printf("size of pucSrc = %d\n", strlen((char*)pucSrc));
status = WSAStartup(MAKEWORD(2, 2), &Data);
if(status != 0)
{
printf("ERROR: WSAStartup unsuccessful");
return 0;
}
else
{
printf("WSAStartup Successfull\n");
}
sock_desc = socket(AF_INET,SOCK_STREAM,0);
if ( sock_desc == INVALID_SOCKET ) {
printf( "Error at socket(): %ld\n", WSAGetLastError() );
WSACleanup();
return;
}
client.sin_family = AF_INET;
client.sin_addr.s_addr = inet_addr( "41.208.68.76" );
client.sin_port = htons( 4444 );
if(connect(sock_desc,(struct sockaddr*)&client,sizeof(client)) == SOCKET_ERROR) {
printf( "Failed to connect.\n" );
WSACleanup();
return;
} else{
printf("connect successfull\n");
}
bytesSent = send( sock_desc, pucSrc, strlen(pucSrc), 0 );
printf( "Bytes Sent: %ld\n", bytesSent );
while( bytesRecv == SOCKET_ERROR ) {
bytesRecv = recv( sock_desc, recvbuf, 256, 0 );
if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {
printf( "Connection Closed.\n");
break;
}
printf( "Bytes Recv: %ld\n", bytesRecv );
if (bytesRecv < 0)
return;
printf( "Bytes Recv: %ld\n", bytesRecv );
}
return 0;
}
when I was analyzing the packet through wireshark I was getting the packet in the server side like below :
2E 60 01 23 06 08 20 20 01 c0 00
92 12 01 23 48 30 30 30 30 30 30
39 53 31 30 30 30 30 30 30 30 30
30 30 30 30 35
Why all 00 bytes are not getting sent.
|