All pastes #375836 Raw Edit

Stuff

public text v1 · immutable
#375836 ·published 2007-02-28 17:33 UTC
rendered paste body
#include <stdio.h>
#include <windows.h>
#include <winbase.h>
#include <winsock.h>
#include "functions.h"

typedef char PACKET[26];


int packetCreate(int dest, int from, char *data, int pkt, int totalpackets, char *output)
{
	int y = 0;
	output[0] = '{'; // Open Packet
	output[1] = 1; // Destination address
	output[2] = 0; // Sender Address
	output[3] = 'D'; // Packet Type
	for(y = 4; y <= 13; y++)
	{
		output[y] = 0;
	}
	
	output[14] = 0;		// Packet chksum (value added when 14th byte = 0
	output[15] = '}';	// Total packets for message!
	output[16] = '[';
	output[17] = pkt;
	output[18] = totalpackets;
	output[19] = ']';
	
	stringcopy(data, output, 4, 10);

	//printf("data = %s, txPkt = %s \n", data, output);
	//getchar();
	
	return pkt;

}

int packetSplit(char *message, char (*pktStore)[20], int dest, int sender)
{

	char	txPkt[20];							/** Somewhere to make our 20 byte packet **/
	char	pktData[10];						/** Somewhere to place selected packet data **/
	int		i,k;								/** Basic incrementing integers **/
	int		pktCount	=	0;					/** Counts the number of packets created, during the process **/
	int		pktRem		=	0;					/** The number of packets remaining for the current message **/
	int		totalPkts	=	0;					/** Number of packets used for the message **/
	int		dataSize	=	0;					/** Used to calculate the length of the message **/

	/********* Count size of the message! & Assess packet requirements ********/

	dataSize = count(message);					/** Counts the length of the message **/
	pktRem = dataSize / 10;						/** Divide data into segments of 10 **/
	//printf("datasize = %d remainder / 10 = %d", dataSize, (dataSize % 10));
	//getchar();
	
	if((dataSize % 10) > 0)						/** if a remainder exists add an extra packet requirement **/
	{
		pktRem++;
	}
	
	totalPkts = pktRem - 1;						/** -1 because packet count includes 0! Separate store reqd **/

	while(pktRem > 0)							/** Process entire packet requirement until no more are needed **/
	{
		printf("PktCount = %d\n", pktCount);
		getchar();
		packetPrep(message, &pktData, (pktCount * 10), 10);				/** Prepare the packet! **/
		packetCreate(dest,sender,&pktData,pktCount,totalPkts,&txPkt);	/** Create the final packet! **/
		checksum(&txPkt);						/** Add checksum data to final packet, stored in txPkt **/
		printf("Packet = %s\n", pktData);
		getchar();
		
		/** Copy the newly created packet into packet storage for current message **/
		
		for(k = 0; k < 20 ; k++)
		{
			pktStore[pktCount][k] = txPkt[k];
		}

		/** Packet created so increase pktCount **/
		pktCount++;
		/** And therefore decrease the pktRem requirement **/
		pktRem--;
		printf("Message = %s",message);
	}

	return 1;
}


int main(void)
{
	char	txPkt[20];	//17 bytes because of buffer overflow problems (this will be traced later)
	char	input[255]	= "Hello world! This message is longer than 10 bytes!"; // Our data is 20 bytes long, must be split into 2 packets!
	char	newpkt[10];
	char	packets[26][20];
	int		i,k;
	int		pktcount	= 0;
	int		pkts		= 0;
	int		totalpkts	= 0;

	int		datasize;
	//printf("Please Enter a message (max 255 chars long) & press ENTER:\n\n");
	//scanf(input, "%s");
	/**** Count Input data length and decide how many packets we need! ****/
	datasize = count(input);	//count input data
	pkts = datasize / 10;		//divide by 10
	printf("datasize = %d remainder / 10 = %d", datasize, (datasize % 10));
	getchar();
	if((datasize % 10) > 0)		//if a remainder add an extra packet requirement
	{
		pkts++;
	}
	totalpkts = pkts - 1;		// -1 because packet count includes 0!
	
		//int packetSplit(char *message, char *pktStore, int dest, int sender)
	
	
	packetSplit(&input, &packets, 1, 0);
	
	printf("packet 1: %x\n\n", packets[0]);
	//display packets

	//displayPkt(&packets);

	printf("Easy read pKts!:\n");

			for(k = 0; k < pktcount; k++)
			{
				printf("Packet %d: %c ",k,packets[k][0]);
				
				for(i = 1; i < 3; i++)
				{
					printf(" %d ",packets[k][i]);

				}
				printf(" %c   ",packets[k][3]);
				for(i = 4; i < 14; i++)
				{
					printf("%c",packets[k][i]);
			
				}

				for(i = 14; i < 15; i++)
				{
					printf("   %5d ",packets[k][i]);

				}
				printf("%c  ",packets[k][15]);
				printf("%c",packets[k][16]);
				printf("%d|",packets[k][17]);
				printf("%d",packets[k][18]);
				printf("%c\n",packets[k][19]);
				
			}
			printf("\nPacket data stream!:\n");
			for(k = 0; k < pktcount; k++)
			{
				printf("%c",k,packets[k][0]);
				
				for(i = 1; i < 3; i++)
				{
					printf("%d",packets[k][i]);

				}
				printf("%c",packets[k][3]);
				for(i = 4; i < 14; i++)
				{
					printf("%c",packets[k][i]);
			
				}

				for(i = 14; i < 15; i++)
				{
					printf("%d",packets[k][i]);

				}
				printf("%c",packets[k][15]);
				printf("%c",packets[k][16]);
				printf("%d",packets[k][17]);
				printf("%d",packets[k][18]);
				printf("%c",packets[k][19]);
				
			}
getchar();
	
	
	/*
	
	//printf("strlen(input) = %d pkts required = %d", datasize, pkts);
    //getchar();
	
	while(pkts > 0)
	{
		packetPrep(&input, &newpkt, (pktcount * 10), 10);		// extract 10 or fewer chars of message for a packet
		packetCreate(1,0,&newpkt,pktcount,totalpkts,&txPkt);	// create a packet with that data
		checksum(&txPkt);
		
		//Copy Characters of packet into packet array!
		
		for(k = 0; k < 20 ; k++)
		{
			packets[pktcount][k] = txPkt[k];
		}


		//printf("pktcount[%d] = %s\n",pktcount,packets[pktcount]);
		if(datasize >= 10)
		{
			datasize = datasize - 10;
		}
		//printf("Pkt %d Data:%s Data remaining = %d\n", pktcount, newpkt, datasize);
		//getchar();
		pktcount++;
		
		pkts--;
		
	}*/


}