Joaquin Verastegui / jro

Dependents:   JRO_CR2 frdm_test

Fork of jro by Miguel Urco

Committer:
miguelcordero191
Date:
Tue Dec 02 02:27:30 2014 +0000
Revision:
0:b444ea725ba7
Child:
1:7c424a3e12ea
Primer programa del DDS funcionando

Who changed what in which revision?

UserRevisionLine numberNew contents of line
miguelcordero191 0:b444ea725ba7 1 #include "ipserver.h"
miguelcordero191 0:b444ea725ba7 2
miguelcordero191 0:b444ea725ba7 3 char* IpData::__findHeader(char* buffer){
miguelcordero191 0:b444ea725ba7 4 /*
miguelcordero191 0:b444ea725ba7 5 Find header and get ip data (without header)
miguelcordero191 0:b444ea725ba7 6
miguelcordero191 0:b444ea725ba7 7 Input:
miguelcordero191 0:b444ea725ba7 8
miguelcordero191 0:b444ea725ba7 9 Return:
miguelcordero191 0:b444ea725ba7 10 valid_ipdata: ip data without header
miguelcordero191 0:b444ea725ba7 11
miguelcordero191 0:b444ea725ba7 12 Example:
miguelcordero191 0:b444ea725ba7 13
miguelcordero191 0:b444ea725ba7 14 buffer = [ B0 B1 $ J R O $ B7 B8 B9 B10 ..... ]
miguelcordero191 0:b444ea725ba7 15
miguelcordero191 0:b444ea725ba7 16 return
miguelcordero191 0:b444ea725ba7 17 valid_ip_data = [ B7 B8 B9 B10 ..... ]
miguelcordero191 0:b444ea725ba7 18
miguelcordero191 0:b444ea725ba7 19
miguelcordero191 0:b444ea725ba7 20 */
miguelcordero191 0:b444ea725ba7 21 char* valid_ip_data;
miguelcordero191 0:b444ea725ba7 22
miguelcordero191 0:b444ea725ba7 23 //Finding header
miguelcordero191 0:b444ea725ba7 24 valid_ip_data = strstr(buffer, HEADER);
miguelcordero191 0:b444ea725ba7 25
miguelcordero191 0:b444ea725ba7 26 if (valid_ip_data == NULL)
miguelcordero191 0:b444ea725ba7 27 return NULL;
miguelcordero191 0:b444ea725ba7 28
miguelcordero191 0:b444ea725ba7 29 valid_ip_data += 5; //skip header
miguelcordero191 0:b444ea725ba7 30
miguelcordero191 0:b444ea725ba7 31 return valid_ip_data;
miguelcordero191 0:b444ea725ba7 32 }
miguelcordero191 0:b444ea725ba7 33
miguelcordero191 0:b444ea725ba7 34 int IpData::__verifyData(char* ip_data, unsigned long len_data){
miguelcordero191 0:b444ea725ba7 35
miguelcordero191 0:b444ea725ba7 36 char new_xor = 0;
miguelcordero191 0:b444ea725ba7 37
miguelcordero191 0:b444ea725ba7 38 for(unsigned long i = 0; i < len_data; i++)
miguelcordero191 0:b444ea725ba7 39 {
miguelcordero191 0:b444ea725ba7 40 new_xor = new_xor xor ip_data[i];
miguelcordero191 0:b444ea725ba7 41 }
miguelcordero191 0:b444ea725ba7 42
miguelcordero191 0:b444ea725ba7 43 if (new_xor != 0)
miguelcordero191 0:b444ea725ba7 44 return 0;
miguelcordero191 0:b444ea725ba7 45
miguelcordero191 0:b444ea725ba7 46 return 1;
miguelcordero191 0:b444ea725ba7 47 }
miguelcordero191 0:b444ea725ba7 48
miguelcordero191 0:b444ea725ba7 49 int IpData::__getParameters(){
miguelcordero191 0:b444ea725ba7 50 return 1;
miguelcordero191 0:b444ea725ba7 51 }
miguelcordero191 0:b444ea725ba7 52
miguelcordero191 0:b444ea725ba7 53 IpData::IpData(){
miguelcordero191 0:b444ea725ba7 54
miguelcordero191 0:b444ea725ba7 55 this->isData = false;
miguelcordero191 0:b444ea725ba7 56
miguelcordero191 0:b444ea725ba7 57 }
miguelcordero191 0:b444ea725ba7 58
miguelcordero191 0:b444ea725ba7 59 int IpData::setIpData(char* buffer, unsigned long len_buffer){
miguelcordero191 0:b444ea725ba7 60
miguelcordero191 0:b444ea725ba7 61 char* ip_data;
miguelcordero191 0:b444ea725ba7 62 unsigned long len_data;
miguelcordero191 0:b444ea725ba7 63
miguelcordero191 0:b444ea725ba7 64 if (len_buffer < 13)
miguelcordero191 0:b444ea725ba7 65 return 0;
miguelcordero191 0:b444ea725ba7 66
miguelcordero191 0:b444ea725ba7 67 //Finding header and get ip data (without header)
miguelcordero191 0:b444ea725ba7 68 ip_data = this->__findHeader(buffer);
miguelcordero191 0:b444ea725ba7 69
miguelcordero191 0:b444ea725ba7 70 if (ip_data == NULL)
miguelcordero191 0:b444ea725ba7 71 return 0;
miguelcordero191 0:b444ea725ba7 72
miguelcordero191 0:b444ea725ba7 73 len_data = ip_data[0]*65536 + ip_data[1]*256 + ip_data[2];
miguelcordero191 0:b444ea725ba7 74
miguelcordero191 0:b444ea725ba7 75 this->buff = ip_data;
miguelcordero191 0:b444ea725ba7 76
miguelcordero191 0:b444ea725ba7 77 if (not this->__verifyData(ip_data, len_data)){
miguelcordero191 0:b444ea725ba7 78 this->isData = false;
miguelcordero191 0:b444ea725ba7 79 return 0;
miguelcordero191 0:b444ea725ba7 80 }
miguelcordero191 0:b444ea725ba7 81
miguelcordero191 0:b444ea725ba7 82 //head = ip_data[0:5];
miguelcordero191 0:b444ea725ba7 83 this->id_class = ip_data[3];
miguelcordero191 0:b444ea725ba7 84 this->id_dev = ip_data[4];
miguelcordero191 0:b444ea725ba7 85 this->cmd = ip_data[5]*256 + ip_data[6];
miguelcordero191 0:b444ea725ba7 86 this->payload = ip_data + 7;
miguelcordero191 0:b444ea725ba7 87 this->payload_len = len_data - 4;
miguelcordero191 0:b444ea725ba7 88 this->isData = true;
miguelcordero191 0:b444ea725ba7 89
miguelcordero191 0:b444ea725ba7 90 return 1;
miguelcordero191 0:b444ea725ba7 91 }
miguelcordero191 0:b444ea725ba7 92
miguelcordero191 0:b444ea725ba7 93 char IpData::getIdClass(){
miguelcordero191 0:b444ea725ba7 94 return this->id_class;
miguelcordero191 0:b444ea725ba7 95 }
miguelcordero191 0:b444ea725ba7 96
miguelcordero191 0:b444ea725ba7 97 char IpData::getIdDevice(){
miguelcordero191 0:b444ea725ba7 98 return this->id_dev;
miguelcordero191 0:b444ea725ba7 99 }
miguelcordero191 0:b444ea725ba7 100
miguelcordero191 0:b444ea725ba7 101 char IpData::getIpCmd(){
miguelcordero191 0:b444ea725ba7 102 return this->cmd;
miguelcordero191 0:b444ea725ba7 103 }
miguelcordero191 0:b444ea725ba7 104
miguelcordero191 0:b444ea725ba7 105 unsigned long IpData::getPayloadLen(){
miguelcordero191 0:b444ea725ba7 106 return this->payload_len;
miguelcordero191 0:b444ea725ba7 107 }
miguelcordero191 0:b444ea725ba7 108
miguelcordero191 0:b444ea725ba7 109 char* IpData::getPayload(){
miguelcordero191 0:b444ea725ba7 110
miguelcordero191 0:b444ea725ba7 111 return this->payload;
miguelcordero191 0:b444ea725ba7 112 }