delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2001/01/20/16:21:36

Message-ID: <3A69FEFF.7020104@operamail.com>
From: Sahab Yazdani <sahaby AT operamail DOT com>
Organization: PheonixSoft Interactive
User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; m18) Gecko/20010107
X-Accept-Language: en
MIME-Version: 1.0
Newsgroups: comp.os.msdos.djgpp
Subject: libsocket over the net...
Lines: 364
Date: Sat, 20 Jan 2001 16:11:27 -0500
NNTP-Posting-Host: 149.99.117.26
X-Complaints-To: abuse AT sprint DOT ca
X-Trace: newscontent-01.sprint.ca 980025367 149.99.117.26 (Sat, 20 Jan 2001 16:16:07 EST)
NNTP-Posting-Date: Sat, 20 Jan 2001 16:16:07 EST
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

This is a multi-part message in MIME format.
--------------090007030306020405000808
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

hello again,
i am attempting to test my application (which uses libsocket) for over 
the net usage.  It doesn't work.  It accepts the connection from the 
client, but then whatever packets I send get garbled up (do I have to 
make everything in packet structures network edian??)  I am completely 
lost and dont have a clue what to do..  I have included the source code 
for the actual transmission and receive of packets with this message in 
the hope that somebody on this newsgroup might be able to help me out...


-- 
***********************************************************
* Sahab Yazdani * "Wizard's Third Rule: Passion rules     *
* Thornhill S.S * Reason." - Kolo's Journal               *
***********************************************************
* http://pheonixsoft.virtualave.net/                      *
***********************************************************

--------------090007030306020405000808
Content-Type: text/plain;
 name="packet.cc"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="packet.cc"

// Tank Massacre V2.1
// Module: Network Code Helper (Packet Sender/Receiver)
// By: Sahab Yazdani

#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <lsck/lsck.h>
#include <sys/socket.h>

#include "packet.h"

//#define DEBUG

MassacreHeader CreateHeader( unsigned char packetType, unsigned char multiples ) {
	MassacreHeader retType;

	strcpy(retType.header, "MASS.NET\0" );
	retType.packetType = packetType;
	retType.multiples = multiples;

	return retType;
}

MassacreBriefingRoomPacket CreateBriefingRoomPacket( char update, unsigned char player, unsigned char type, char name[] ) {
	MassacreBriefingRoomPacket retType;

	retType.update = update;
	retType.player = player;
	retType.type = type;
	strcpy( retType.name, name );

	return retType;
}

MassacreChatPacket CreateChatPacket( char message[] ) {
	MassacreChatPacket retType;

	strcpy( retType.message, message );

	return retType;
}

bool SendHeader( int sock, unsigned char packetType, unsigned char multiples = 1 ) {
	MassacreHeader header;

	strcpy( header.header, "MASS.NET\0" );
	header.packetType = packetType;
	header.multiples = multiples;

	if ( send( sock, (void *) &header, sizeof( MassacreHeader ), 0 )!=sizeof( MassacreHeader ) )
		return false;
	else
		return true;
}

MassacreHeader ReceiveHeader( int sock ) {
	unsigned char *tempBuffer = new unsigned char[sizeof( MassacreHeader )];
	MassacreHeader header;
	int len=0, len1=0, smH;
	bool err=false;
	
	smH = sizeof( MassacreHeader );
	while ( len = recv( sock, ( void * ) tempBuffer, smH, MSG_WAITALL ) ) {
		if ( len == - 1 ) {
			err = true;
			break;
		}
		while ( len < smH ) {
			printf( "len: %i, smH: %i, neccessary: %i\n", len, smH, smH - len );
			len1 = recv( sock, ( void * ) &tempBuffer[len], smH - len, 0 );
			if ( len1 == -1 ) {
			    lsck_perror("ERROR");
				err=true;
				break;
			}
			len += len1;
		}
	}

	memcpy( (void *) &header, (void *) tempBuffer, smH );	
	
	if (!err) {
		printf( "HEADER: %s PACKETTYPE: %i MULTIPLES: %i\n", header.header, header.packetType, header.multiples );
		if ( strstr( header.header, "MASS.NET" )==NULL )
			header.packetType = PACKETSTYLE_ERROR;
	} else {
		header.packetType=PACKETSTYLE_ERROR;
		header.multiples = errno;
	}

	delete tempBuffer;
	
	return header;
}

int BroadcastHeader( int socks[], int sockets, int retSocket, MassacreHeader mH ) {
	int sC;
	int retVal=0;
	
	for ( sC=0;sC<sockets;sC++ ) {
#ifndef DEBUG
		if ( sC!=retSocket ) {
#endif
			if ( SendHeader( socks[sC], mH.packetType, mH.multiples ) ) {
				ReceiveFoo( socks[sC] );				
				retVal++;
			}
#ifndef DEBUG
		}
#endif
	}

	return retVal;
}

bool SendChatPacket( int sock, char message[] ) {
	MassacreChatPacket mCP;

	memset( &mCP, 0, sizeof( MassacreChatPacket ) );
	strcpy( mCP.message, message );
	if ( send( sock, (void *) &mCP, sizeof( MassacreChatPacket ), 0 )!=sizeof( MassacreChatPacket ) )
		return false;
	else
		return true;
}

MassacreChatPacket ReceiveChatPacket( int sock ) {
	unsigned char *tempBuffer = new unsigned char[sizeof( MassacreChatPacket )];
	MassacreChatPacket header;
	int len=0, len1=0, smH;
	bool err=false;
	
	smH = sizeof( MassacreChatPacket );
	while ( len = recv( sock, ( void * ) tempBuffer, smH, 0 ) ) {
		if ( len == - 1 ) {
			err=true;
			break;
		}
		while ( len < smH ) {
			len1 = recv( sock, ( void * ) &tempBuffer[len], smH - len, 0 );
			if ( len1 == -1 ) {
				err=true;
				break;
			}
			len += len1;
		}
	}

	memcpy( (void *) &header, (void *) tempBuffer, smH );
	if ( err )
		strcpy( header.message, "ERROR" );

	return header;
}

int BroadcastChatPacket( int socks[], int sockets, int retSocket, char message[], bool receiveResponse ) {
	int sC;
	int retVal=0;
	
	for ( sC=0;sC<sockets;sC++ ) {
#ifndef DEBUG
		if ( sC!=retSocket ) {
#endif DEBUG
			if ( SendChatPacket( socks[sC], message ) ) {
				if ( receiveResponse ) {
					MassacreHeader mH;
					
					mH = ReceiveHeader( socks[sC] );
 					if ( mH.packetType!=PACKETSTYLE_ERROR ) retVal++;
				} else
					retVal++;
			}
#ifndef DEBUG
		}
#endif
	}

	return retVal;
}

bool SendBriefingRoomPacket( int sock, unsigned char number, unsigned char type, char name[], char update ) {
	MassacreBriefingRoomPacket mBRP;

	mBRP.player = number;
	mBRP.type = type;
	mBRP.update = update;
	strcpy( mBRP.name, name );

	if ( send( sock, (void *) &mBRP, sizeof( MassacreBriefingRoomPacket ), 0 )!=sizeof( MassacreBriefingRoomPacket ) )
		return false;
	else
		return true;
}

MassacreBriefingRoomPacket ReceiveBriefingRoomPacket( int sock ) {
	unsigned char *tempBuffer = new unsigned char[sizeof( MassacreBriefingRoomPacket )];
	MassacreBriefingRoomPacket header;
	int len=0, len1=0, smH;
	bool err=false;
	
	smH = sizeof( MassacreBriefingRoomPacket );
	while ( len = recv( sock, ( void * ) tempBuffer, smH, 0 ) ) {
		if ( len == - 1 ) {
			err=true;
			break;
		}
		while ( len < smH ) {
			len1 = recv( sock, ( void * ) &tempBuffer[len], smH - len, 0 );
			if ( len1 == -1 ) {
				err=true;
				break;
			}
			len += len1;
		}
	}

	memcpy( (void *) &header, (void *) tempBuffer, smH );
	if (err)
		strcpy( header.name, "ERROR" );
		
	return header;
}

int BroadcastBriefingRoomPacket( int socks[], int sockets, int retSocket, MassacreBriefingRoomPacket mBRP, bool receiveResponse ) {
	int sC;
	int retVal=0;
	
	for ( sC=0;sC<sockets;sC++ ) {
#ifndef DEBUG
		if ( sC!=retSocket ) {
#endif
			if ( SendBriefingRoomPacket( socks[sC], mBRP.player, mBRP.type, mBRP.name, mBRP.update ) ) {
				if ( receiveResponse ) {
					MassacreHeader mH;
					
					mH = ReceiveHeader( socks[sC] );
 					if ( mH.packetType!=PACKETSTYLE_ERROR ) retVal++;
				} else
					retVal++;
			}
#ifndef DEBUG
		}
#endif
	}

	return retVal;
}

void SendFoo( int sock ) {
	char a = 0;

	send( sock, (void *) &a, sizeof( char ), 0 );
}

void ReceiveFoo( int sock ) {
	char a;

	recv( sock, (void *) &a, sizeof( char ), 0 );
}

--------------090007030306020405000808
Content-Type: text/plain;
 name="packet.h"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="packet.h"

#ifndef PACKET_H
#define PACKET_H

#define PACKETSTYLE_NODATA									0
#define PACKETSTYLE_ERROR									255
#define PACKETSTYLE_ACKNOWLEDGE							254
#define PACKETSTYLE_CONNECT								253
#define PACKETSTYLE_DISCONNECT							252
#define PACKETSTYLE_SERVERDISCONNECT					251
#define PACKETSTYLE_BRIEFINGROOM_DATA					1
#define PACKETSTYLE_BRIEFINGROOM_CHAT					2
#define PACKETSTYLE_BRIEFINGROOM_PROCEED				3

#define PORT								3940
#define BACKLOG							9

#define SENTIENT							0
#define COMPUTER							1

struct MassacreHeader {
	char header[10]						__attribute__ ((packed)); // 'MASS.NET'
	unsigned char packetType			__attribute__ ((packed));
	unsigned char multiples				__attribute__ ((packed));
};

struct MassacreBriefingRoomPacket {
	char update								__attribute__ ((packed));
	unsigned char player					__attribute__ ((packed));
	unsigned char type					__attribute__ ((packed));
	char name[40]							__attribute__ ((packed));
};

struct MassacreChatPacket {
	char message[235]						__attribute__ ((packed));
};

MassacreHeader					CreateHeader( unsigned char packetType, unsigned char multiples );
MassacreBriefingRoomPacket CreateBriefingRoomPacket( char update, unsigned char player, unsigned char type, char name[] );
MassacreChatPacket			CreateChatPacket( char message[] );

// Server/Client
bool SendHeader( int sock, unsigned char packetType, unsigned char multiples = 1 );
MassacreHeader ReceiveHeader( int sock );
// Server Only
int BroadcastHeader( int socks[], int sockets, int retSocket, MassacreHeader mH );

// Server/Client
bool SendChatPacket( int sock, char message[] );
MassacreChatPacket ReceiveChatPacket( int sock );
// Server Only
int BroadcastChatPacket( int socks[], int sockets, int retSocket, char message[], bool receiveResponse=false );

// Server/Client
bool SendBriefingRoomPacket( int sock, unsigned char number, unsigned char type, char name[], char update );
MassacreBriefingRoomPacket ReceiveBriefingRoomPacket( int sock );
// Server Only
int BroadcastBriefingRoomPacket( int socks[], int sockets, int retSocket, MassacreBriefingRoomPacket mBRP, bool receiveResponse=false );

// Retardo
void SendFoo( int sock );
void ReceiveFoo( int sock );

#endif

--------------090007030306020405000808--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019