860e91ba85e0070b3deb854f8a8e9952bceca480
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c   1) /* BlinkenLib
Stefan Schuermans update email address of author

Stefan Schuermans authored 10 years ago

BlinkenLib/BlinkenProto.c   2)    Copyright 2004-2014 Stefan Schuermans <stefan@schuermans.info>
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c   3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
BlinkenLib/BlinkenProto.c   4)    a blinkenarea.org project */
BlinkenLib/BlinkenProto.c   5) 
BlinkenLib/BlinkenProto.c   6) #include <string.h>
BlinkenLib/BlinkenProto.c   7) #ifdef WIN32
BlinkenLib/BlinkenProto.c   8) #include <windows.h>
Stefan Schuermans format

Stefan Schuermans authored 1 year ago

src/BlinkenProto.c          9) #include <winsock2.h>
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c  10) typedef WORD uint16_t;
BlinkenLib/BlinkenProto.c  11) typedef DWORD uint32_t;
BlinkenLib/BlinkenProto.c  12) #else
BlinkenLib/BlinkenProto.c  13) #include <netinet/in.h>
Stefan Schuermans format

Stefan Schuermans authored 1 year ago

src/BlinkenProto.c         14) #include <stdint.h>
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c  15) #endif
BlinkenLib/BlinkenProto.c  16) 
BlinkenLib/BlinkenProto.c  17) #include <BlinkenLib/BlinkenProto.h>
BlinkenLib/BlinkenProto.c  18) 
Stefan Schuermans restructure directories

Stefan Schuermans authored 5 years ago

src/BlinkenProto.c         19) #include "BlinkenProtoIntern.h"
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c  20) 
BlinkenLib/BlinkenProto.c  21) int BlinkenProtoMakePacket(etBlinkenProto proto, etBlinkenPacket packet,
BlinkenLib/BlinkenProto.c  22)                            char *pData, int maxLength)
BlinkenLib/BlinkenProto.c  23) // returns length or -1 on error
BlinkenLib/BlinkenProto.c  24) {
BlinkenLib/BlinkenProto.c  25)   uint32_t magic;
BlinkenLib/BlinkenProto.c  26)   char *body;
BlinkenLib/BlinkenProto.c  27)   int len;
BlinkenLib/BlinkenProto.c  28) 
BlinkenLib/BlinkenProto.c  29)   magic = 0;
BlinkenLib/BlinkenProto.c  30)   len = -1;
BlinkenLib/BlinkenProto.c  31) 
BlinkenLib/BlinkenProto.c  32)   // info packet processing: body identical for all protocols
BlinkenLib/BlinkenProto.c  33)   switch (packet) {
Stefan Schuermans format

Stefan Schuermans authored 1 year ago

src/BlinkenProto.c         34)   case BlinkenPacketStreamEnd:
src/BlinkenProto.c         35)     body = "END\0\0\0\0\0";
src/BlinkenProto.c         36)     len = 8;
src/BlinkenProto.c         37)     break;
src/BlinkenProto.c         38)   case BlinkenPacketNone:
src/BlinkenProto.c         39)   case BlinkenPacketFrame:
src/BlinkenProto.c         40)   case BlinkenPacketRequest:
src/BlinkenProto.c         41)   case BlinkenPacketEndRequest:
src/BlinkenProto.c         42)     // keep compiler happy
src/BlinkenProto.c         43)     break;
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c  44)   }
BlinkenLib/BlinkenProto.c  45) 
BlinkenLib/BlinkenProto.c  46)   switch (proto) {
BlinkenLib/BlinkenProto.c  47)   case BlinkenProtoNone:
BlinkenLib/BlinkenProto.c  48)     break;
BlinkenLib/BlinkenProto.c  49)   case BlinkenProtoBlp:
BlinkenLib/BlinkenProto.c  50)     switch (packet) {
Stefan Schuermans format

Stefan Schuermans authored 1 year ago

src/BlinkenProto.c         51)     case BlinkenPacketFrame:
src/BlinkenProto.c         52)       magic = BlinkenProtoBlpMagic;
src/BlinkenProto.c         53)       body = "\0\0\0\0\0\0\0\0"; // size 0x0
src/BlinkenProto.c         54)       len = 8;
src/BlinkenProto.c         55)       break;
src/BlinkenProto.c         56)     case BlinkenPacketRequest:
src/BlinkenProto.c         57)       magic = BlinkenProtoBlpReqMagic;
src/BlinkenProto.c         58)       body = "REFRESH";
src/BlinkenProto.c         59)       len = 7;
src/BlinkenProto.c         60)       break;
src/BlinkenProto.c         61)     case BlinkenPacketEndRequest:
src/BlinkenProto.c         62)       magic = BlinkenProtoBlpReqMagic;
src/BlinkenProto.c         63)       body = "CLOSE";
src/BlinkenProto.c         64)       len = 5;
src/BlinkenProto.c         65)       break;
src/BlinkenProto.c         66)     default: // might be info packet, set only magic
src/BlinkenProto.c         67)       magic = BlinkenProtoBlpInfoMagic;
src/BlinkenProto.c         68)       break;
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c  69)     }
BlinkenLib/BlinkenProto.c  70)     break;
BlinkenLib/BlinkenProto.c  71)   case BlinkenProtoEblp:
BlinkenLib/BlinkenProto.c  72)     switch (packet) {
Stefan Schuermans format

Stefan Schuermans authored 1 year ago

src/BlinkenProto.c         73)     case BlinkenPacketFrame:
src/BlinkenProto.c         74)       magic = BlinkenProtoEblpMagic;
src/BlinkenProto.c         75)       body = "\0\0\0\0\0\0\0\0"; // size 0x0
src/BlinkenProto.c         76)       len = 8;
src/BlinkenProto.c         77)       break;
src/BlinkenProto.c         78)     case BlinkenPacketRequest:
src/BlinkenProto.c         79)       magic = BlinkenProtoBlpReqMagic;
src/BlinkenProto.c         80)       body = "REFRESH256";
src/BlinkenProto.c         81)       len = 10;
src/BlinkenProto.c         82)       break;
src/BlinkenProto.c         83)     case BlinkenPacketEndRequest:
src/BlinkenProto.c         84)       magic = BlinkenProtoBlpReqMagic;
src/BlinkenProto.c         85)       body = "CLOSE256";
src/BlinkenProto.c         86)       len = 8;
src/BlinkenProto.c         87)       break;
src/BlinkenProto.c         88)     default: // might be info packet, set only magic
src/BlinkenProto.c         89)       magic = BlinkenProtoEblpInfoMagic;
src/BlinkenProto.c         90)       break;
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c  91)     }
BlinkenLib/BlinkenProto.c  92)     break;
BlinkenLib/BlinkenProto.c  93)   case BlinkenProtoMcuf:
BlinkenLib/BlinkenProto.c  94)     switch (packet) {
Stefan Schuermans format

Stefan Schuermans authored 1 year ago

src/BlinkenProto.c         95)     case BlinkenPacketFrame:
src/BlinkenProto.c         96)       magic = BlinkenProtoMcufMagic;
src/BlinkenProto.c         97)       body = "\0\0\0\0\0\0\0\0"; // size 0x0
src/BlinkenProto.c         98)       len = 8;
src/BlinkenProto.c         99)       break;
src/BlinkenProto.c        100)     case BlinkenPacketRequest:
src/BlinkenProto.c        101)       magic = BlinkenProtoMcufReqMagic;
src/BlinkenProto.c        102)       body = "\0\0\0\0\0\0\0\0";
src/BlinkenProto.c        103)       len = 8;
src/BlinkenProto.c        104)       break;
src/BlinkenProto.c        105)     case BlinkenPacketEndRequest:
src/BlinkenProto.c        106)       magic = BlinkenProtoMcufEndReqMagic;
src/BlinkenProto.c        107)       body = "\0\0\0\0\0\0\0\0";
src/BlinkenProto.c        108)       len = 8;
src/BlinkenProto.c        109)       break;
src/BlinkenProto.c        110)     default: // might be info packet, set only magic
src/BlinkenProto.c        111)       magic = BlinkenProtoMcufInfoMagic;
src/BlinkenProto.c        112)       break;
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c 113)     }
BlinkenLib/BlinkenProto.c 114)     break;
BlinkenLib/BlinkenProto.c 115)   }
BlinkenLib/BlinkenProto.c 116) 
BlinkenLib/BlinkenProto.c 117)   // magic not set or body not set -> error
BlinkenLib/BlinkenProto.c 118)   if (magic == 0 || len < 0)
BlinkenLib/BlinkenProto.c 119)     return -1;
BlinkenLib/BlinkenProto.c 120) 
BlinkenLib/BlinkenProto.c 121)   // fill buffer
BlinkenLib/BlinkenProto.c 122)   if (maxLength < (int)sizeof(magic))
BlinkenLib/BlinkenProto.c 123)     return -1;
BlinkenLib/BlinkenProto.c 124)   *(uint32_t *)pData = htonl(magic);
BlinkenLib/BlinkenProto.c 125)   if (maxLength < (int)sizeof(magic) + len) {
BlinkenLib/BlinkenProto.c 126)     memcpy(pData + sizeof(magic), body, maxLength - sizeof(magic));
BlinkenLib/BlinkenProto.c 127)     return -1;
BlinkenLib/BlinkenProto.c 128)   }
BlinkenLib/BlinkenProto.c 129)   memcpy(pData + sizeof(magic), body, len);
BlinkenLib/BlinkenProto.c 130)   return sizeof(magic) + len;
BlinkenLib/BlinkenProto.c 131) }
BlinkenLib/BlinkenProto.c 132) 
BlinkenLib/BlinkenProto.c 133) void BlinkenProtoDetectPacket(const char *pData, int length,
Stefan Schuermans format

Stefan Schuermans authored 1 year ago

src/BlinkenProto.c        134)                               etBlinkenProto *pProto, etBlinkenPacket *pPacket)
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c 135) // returns protocol in *pProto if pProto not NULL
BlinkenLib/BlinkenProto.c 136) // returns packet type in *pPacket if pPacket not NULL
BlinkenLib/BlinkenProto.c 137) {
BlinkenLib/BlinkenProto.c 138)   uint32_t magic;
BlinkenLib/BlinkenProto.c 139)   int info;
BlinkenLib/BlinkenProto.c 140) 
BlinkenLib/BlinkenProto.c 141)   // get magic
BlinkenLib/BlinkenProto.c 142)   if (length < (int)sizeof(magic)) {
BlinkenLib/BlinkenProto.c 143)     if (pProto)
BlinkenLib/BlinkenProto.c 144)       *pProto = BlinkenProtoNone;
BlinkenLib/BlinkenProto.c 145)     if (pPacket)
BlinkenLib/BlinkenProto.c 146)       *pPacket = BlinkenPacketNone;
BlinkenLib/BlinkenProto.c 147)     return;
BlinkenLib/BlinkenProto.c 148)   }
BlinkenLib/BlinkenProto.c 149)   magic = ntohl(*(uint32_t *)pData);
BlinkenLib/BlinkenProto.c 150) 
BlinkenLib/BlinkenProto.c 151)   info = 0;
BlinkenLib/BlinkenProto.c 152)   switch (magic) {
BlinkenLib/BlinkenProto.c 153)   case BlinkenProtoBlpMagic:
BlinkenLib/BlinkenProto.c 154)     if (length >= (int)sizeof(stBlinkenProtoBlpHdr)) {
BlinkenLib/BlinkenProto.c 155)       if (pProto)
BlinkenLib/BlinkenProto.c 156)         *pProto = BlinkenProtoBlp;
BlinkenLib/BlinkenProto.c 157)       if (pPacket)
BlinkenLib/BlinkenProto.c 158)         *pPacket = BlinkenPacketFrame;
BlinkenLib/BlinkenProto.c 159)       return;
BlinkenLib/BlinkenProto.c 160)     }
BlinkenLib/BlinkenProto.c 161)     break;
BlinkenLib/BlinkenProto.c 162)   case BlinkenProtoBlpReqMagic:
Stefan Schuermans format

Stefan Schuermans authored 1 year ago

src/BlinkenProto.c        163)     if (length >= (int)sizeof(magic) + 10 &&
src/BlinkenProto.c        164)         !memcmp(pData + sizeof(magic), "REFRESH256", 10)) {
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c 165)       if (pProto)
BlinkenLib/BlinkenProto.c 166)         *pProto = BlinkenProtoEblp;
BlinkenLib/BlinkenProto.c 167)       if (pPacket)
BlinkenLib/BlinkenProto.c 168)         *pPacket = BlinkenPacketRequest;
BlinkenLib/BlinkenProto.c 169)       return;
BlinkenLib/BlinkenProto.c 170)     }
Stefan Schuermans format

Stefan Schuermans authored 1 year ago

src/BlinkenProto.c        171)     if (length >= (int)sizeof(magic) + 8 &&
src/BlinkenProto.c        172)         !memcmp(pData + sizeof(magic), "CLOSE256", 8)) {
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c 173)       if (pProto)
BlinkenLib/BlinkenProto.c 174)         *pProto = BlinkenProtoEblp;
BlinkenLib/BlinkenProto.c 175)       if (pPacket)
BlinkenLib/BlinkenProto.c 176)         *pPacket = BlinkenPacketEndRequest;
BlinkenLib/BlinkenProto.c 177)       return;
BlinkenLib/BlinkenProto.c 178)     }
Stefan Schuermans format

Stefan Schuermans authored 1 year ago

src/BlinkenProto.c        179)     if (length >= (int)sizeof(magic) + 7 &&
src/BlinkenProto.c        180)         !memcmp(pData + sizeof(magic), "REFRESH", 7)) {
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c 181)       if (pProto)
BlinkenLib/BlinkenProto.c 182)         *pProto = BlinkenProtoBlp;
BlinkenLib/BlinkenProto.c 183)       if (pPacket)
BlinkenLib/BlinkenProto.c 184)         *pPacket = BlinkenPacketRequest;
BlinkenLib/BlinkenProto.c 185)       return;
BlinkenLib/BlinkenProto.c 186)     }
Stefan Schuermans format

Stefan Schuermans authored 1 year ago

src/BlinkenProto.c        187)     if (length >= (int)sizeof(magic) + 5 &&
src/BlinkenProto.c        188)         !memcmp(pData + sizeof(magic), "CLOSE", 5)) {
Stefan Schuermans added support for creating/...

Stefan Schuermans authored 12 years ago

BlinkenLib/BlinkenProto.c 189)       if (pProto)
BlinkenLib/BlinkenProto.c 190)         *pProto = BlinkenProtoBlp;
BlinkenLib/BlinkenProto.c 191)       if (pPacket)
BlinkenLib/BlinkenProto.c 192)         *pPacket = BlinkenPacketEndRequest;
BlinkenLib/BlinkenProto.c 193)       return;
BlinkenLib/BlinkenProto.c 194)     }
BlinkenLib/BlinkenProto.c 195)     break;
BlinkenLib/BlinkenProto.c 196)   case BlinkenProtoBlpInfoMagic:
BlinkenLib/BlinkenProto.c 197)     if (length >= (int)sizeof(magic) + 8) {
BlinkenLib/BlinkenProto.c 198)       if (pProto)
BlinkenLib/BlinkenProto.c 199)         *pProto = BlinkenProtoBlp;
BlinkenLib/BlinkenProto.c 200)       info = 1; // further processing of info packet below
BlinkenLib/BlinkenProto.c 201)     }
BlinkenLib/BlinkenProto.c 202)     break;
BlinkenLib/BlinkenProto.c 203)   case BlinkenProtoEblpMagic:
BlinkenLib/BlinkenProto.c 204)     if (length >= (int)sizeof(stBlinkenProtoEblpHdr)) {
BlinkenLib/BlinkenProto.c 205)       if (pProto)
BlinkenLib/BlinkenProto.c 206)         *pProto = BlinkenProtoEblp;
BlinkenLib/BlinkenProto.c 207)       if (pPacket)
BlinkenLib/BlinkenProto.c 208)         *pPacket = BlinkenPacketFrame;
BlinkenLib/BlinkenProto.c 209)       return;
BlinkenLib/BlinkenProto.c 210)     }
BlinkenLib/BlinkenProto.c 211)     break;
BlinkenLib/BlinkenProto.c 212)   case BlinkenProtoEblpInfoMagic:
BlinkenLib/BlinkenProto.c 213)     if (length >= (int)sizeof(magic) + 8) {
BlinkenLib/BlinkenProto.c 214)       if (pProto)
BlinkenLib/BlinkenProto.c 215)         *pProto = BlinkenProtoEblp;
BlinkenLib/BlinkenProto.c 216)       info = 1; // further processing of info packet below
BlinkenLib/BlinkenProto.c 217)     }
BlinkenLib/BlinkenProto.c 218)     break;
BlinkenLib/BlinkenProto.c 219)   case BlinkenProtoMcufMagic:
BlinkenLib/BlinkenProto.c 220)     if (length >= (int)sizeof(stBlinkenProtoMcufHdr)) {
BlinkenLib/BlinkenProto.c 221)       if (pProto)
BlinkenLib/BlinkenProto.c 222)         *pProto = BlinkenProtoMcuf;
BlinkenLib/BlinkenProto.c 223)       if (pPacket)
BlinkenLib/BlinkenProto.c 224)         *pPacket = BlinkenPacketFrame;
BlinkenLib/BlinkenProto.c 225)       return;
BlinkenLib/BlinkenProto.c 226)     }
BlinkenLib/BlinkenProto.c 227)     break;
BlinkenLib/BlinkenProto.c 228)   case BlinkenProtoMcufReqMagic:
BlinkenLib/BlinkenProto.c 229)     if (pProto)
BlinkenLib/BlinkenProto.c 230)       *pProto = BlinkenProtoMcuf;
BlinkenLib/BlinkenProto.c 231)     if (pPacket)
BlinkenLib/BlinkenProto.c 232)       *pPacket = BlinkenPacketRequest;
BlinkenLib/BlinkenProto.c 233)     return;
BlinkenLib/BlinkenProto.c 234)   case BlinkenProtoMcufEndReqMagic:
BlinkenLib/BlinkenProto.c 235)     if (pProto)
BlinkenLib/BlinkenProto.c 236)       *pProto = BlinkenProtoMcuf;
BlinkenLib/BlinkenProto.c 237)     if (pPacket)
BlinkenLib/BlinkenProto.c 238)       *pPacket = BlinkenPacketEndRequest;
BlinkenLib/BlinkenProto.c 239)     return;
BlinkenLib/BlinkenProto.c 240)   case BlinkenProtoMcufInfoMagic:
Stefan Schuermans implemented rotationg and m...

Stefan Schuermans authored 11 years ago

BlinkenLib/BlinkenProto.c 241)     if (length >= (int)sizeof(magic) + 8) {