IvoSilva

[RCOM.h] Manipulação de mensagens

Nov 4th, 2014
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.88 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define F 0x7e
  6. #define A 0x03
  7. #define UA 0x07
  8. #define SET 0x03
  9.  
  10. #define I0 0x00
  11. #define I1 0x40
  12.  
  13. #define RR0 0x05
  14. #define RR1 0x85
  15.  
  16. #define REJ0 0x01
  17. #define REJ1 0x81
  18.  
  19. #define DISC 0x0B
  20.  
  21. typedef struct
  22. {
  23.     unsigned long SeqNumber, DataSize;
  24.     unsigned char *Data;
  25. } DataStruct;
  26.  
  27. typedef struct
  28. {
  29.     unsigned short Type[2], Length[2];
  30.     unsigned char *Filename, *FileSize;
  31. } CntrlStruct;
  32.  
  33. typedef struct
  34. {
  35.     unsigned short InfType;
  36.     DataStruct InfData;
  37.     //CntrlStruct InfCntrl;
  38. } InfStruct;
  39.  
  40. /* --- Stuffing ---
  41.  
  42.     Param:
  43.         unsigned char *Destuffed:   Mensagem original, que ainda não levou stuffing.
  44.         int DestuffedSize:          Tamanho da mensagem original, que ainda não levou stuffing.
  45.         int *StuffedSize:           Tamanho da nova mensagem, que levará stuffing.
  46.  
  47.     Return:
  48.         unsigned char *Stuffed:     Nova mensagem, que levou stuffing.
  49.  
  50.     P.S.: A função já ignora o 1º e último elementos, pelo que Destuffed já deverá conter as flags F.
  51.  
  52. --- Stuffing --- */
  53.  
  54. unsigned char *Stuffing(unsigned char *Destuffed, unsigned short DestuffedSize, unsigned short *StuffedSize);
  55.  
  56. /* --- Destuffing ---
  57.  
  58.     Param:
  59.         unsigned char *Stuffed:     Mensagem original, que levou stuffing.
  60.         int StuffedSize:            Tamanho da mensagem original, que levou stuffing.
  61.         int *DestuffedSize:         Tamanho da nova mensagem, que levará destuffing.
  62.  
  63.     Return:
  64.         unsigned char *Destuffed:   Nova mensagem, que levou destuffing.
  65.  
  66.     P.S.: A função já ignora o 1º e último elementos, pelo que Stuffed já deverá conter as flags F.
  67.  
  68. --- Destuffing --- */
  69.  
  70. unsigned char *Destuffing(unsigned char *Stuffed, unsigned short StuffedSize, unsigned short *DestuffedSize);
  71.  
  72. /* --- CreateDataPacket ---
  73.  
  74.     Param:
  75.         DataStruct DataPacket:      Estrutura que contém tudo o que um DataPacket precisa (SeqNumber, K e Data).
  76.         unsigned short *PacketSize: Tamanho da string onde será colocado o pacote de dados com o cabeçalho inteiro.
  77.         unsigned char CntrlField:   Valor do campo de controlo.
  78.         unsigned short *BCC2:       Valor que contêm o "ou exclusivo" para verificação do pacote de dados.
  79.  
  80.     Return:
  81.         unsigned char *DataString:  String onde será colocado o pacote de dados com o cabeçalho inteiro.
  82.  
  83. --- CreateDataPacket --- */
  84.  
  85. unsigned char *CreateDataPacket (DataStruct DataPacket, unsigned short *PacketSize, unsigned short CntrlField, unsigned short *BCC2);
  86.  
  87. /* --- ReadDataPacket ---
  88.  
  89.     Param:
  90.         DataStruct DataPacket:      Estrutura para colocar tudo o que um DataPacket precisa (SeqNumber, K e Data).
  91.         unsigned char *DataString:  String onde está colocado o pacote de dados com o cabeçalho inteiro.
  92.         unsigned short PacketSize:  Tamanho da string onde está colocado o pacote de dados com o cabeçalho inteiro.
  93.  
  94.     Return:
  95.         signed short *BCC2:         Valor que contêm o "ou exclusivo" para verificação do pacote de dados.
  96.  
  97. --- ReadDataPacket --- */
  98.  
  99. signed short ReadDataPacket (DataStruct *DataPacket, unsigned char *DataString, unsigned short PacketSize);
  100.  
  101. /* --- CreateCntrlPacket ---
  102.  
  103.     Param:
  104.         CntrlStruct CntrlPacket:    Estrutura que contém tudo o que um CntrlPacket precisa (Types, Lengths, Filename e FileSize).
  105.         unsigned short *PacketSize: Tamanho da string onde será colocado o pacote de dados com o cabeçalho inteiro.
  106.         unsigned short CntrlField:  Valor do campo de controlo.
  107.         unsigned short *BCC2:       Valor que contêm o "ou exclusivo" para verificação do pacote de dados.
  108.  
  109.     Return:
  110.         unsigned char *CntrlString:  String onde será colocado o pacote de controlo com o cabeçalho inteiro.
  111.  
  112. --- CreateCntrlPacket --- */
  113.  
  114. unsigned char *CreateCntrlPacket (CntrlStruct CntrlPacket, unsigned short *PacketSize, unsigned short CntrlField, unsigned short *BCC2);
  115.  
  116. /* --- ReadCntrlPacket ---
  117.  
  118.     Param:
  119.         DataStruct CntrlPacket:      Estrutura para colocar tudo o que um DataPacket precisa (SeqNumber, K e Data).
  120.         unsigned char *CntrlString:  String onde está colocado o pacote de dados com o cabeçalho inteiro.
  121.         unsigned short PacketSize: Tamanho da string onde está colocado o pacote de dados com o cabeçalho inteiro.
  122.  
  123.     Return:
  124.         signed short BCC2:       Valor que contêm o "ou exclusivo" para verificação do pacote de dados.
  125.  
  126. --- ReadCntrlPacket --- */
  127.  
  128. signed short ReadCntrlPacket (CntrlStruct *CntrlPacket, unsigned char *CntrlString, unsigned short PacketSize);
  129.  
  130. /* --- CreateConfirmMsg ---
  131.  
  132.     Param:
  133.         unsigned short *ConfirmMsgSize: Tamanho da mensagem de confirmação (será sempre 5).
  134.         unsigned short CntrlField:  Valor do campo de controlo.
  135.  
  136.     Return:
  137.         unsigned char *ConfirmMsg:  String onde será colocado mensagem de confirmação com o cabeçalho inteiro.
  138.  
  139. --- CreateConfirmMsg --- */
  140.  
  141. unsigned char *CreateConfirmMsg (unsigned short *ConfirmMsgSize, unsigned short CntrlField);
  142.  
  143. /* --- ReadConfirmMsg ---
  144.  
  145.     Param:
  146.         unsigned char *ConfirmMsg:      String onde está colocada a mensagem de confirmação.
  147.         unsigned short *ConfirmMsgSize: Tamanho da mensagem de informação.
  148.  
  149.     Return:
  150.         signed short CntrlField:  Campo de controlo. Retorna -1 caso a mensagem não seja válida. Case seja válida retorna a Flag da ConfirmMsg.
  151.  
  152. --- ReadConfirmMsg --- */
  153.  
  154. signed short ReadConfirmMsg (unsigned char *ConfirmMsg, unsigned short ConfirmMsgSize); // <-- Confirmar State final com ConfirmMsgSize
  155.  
  156. /* --- CreateInfMsg ---
  157.  
  158.     Param:
  159.         unsigned short *InfMsgSize: Tamanho da mensagem de informação.
  160.         unsigned short CntrlField:  Valor do campo de controlo.
  161.         unsigned char *DataField:   Conteúdo de dados a colocar.
  162.         unsigend short DataSize:    Tamanho do conteúdo de dados.
  163.         unsigned short BCC2:        BCC2 do conteúdo de dados.
  164.  
  165.     Return:
  166.         unsigned char *InfMsg:      String onde será colocado mensagem de informação com o cabeçalho inteiro.
  167.  
  168. --- CreateInfMsg --- */
  169.  
  170. unsigned char *CreateInfMsg (unsigned short *InfMsgSize, unsigned short CntrlField, unsigned char *DataField, unsigned short DataSize, unsigned short BCC2);
  171.  
  172. /* --- ReadInfMsg ---
  173.  
  174.     Param:
  175.         InfStruct *InfPacket:       Estrutura para colocar tudo o que uma mensagem de Informação precisa.
  176.         unsigned char *InfString:   String onde está colocado mensagem de informação com o cabeçalho inteiro.
  177.         unsigned short InfMsgSize:  Tamanho da mensagem de informação.
  178.  
  179.     Return:
  180.         Type:                       Devolve -1 se a InfMsg for inválida. Caso válida, devolve o tipo de dados que contêm.
  181.  
  182. --- ReadInfMsg --- */
  183.  
  184. signed short ReadInfMsg (InfStruct *InfPacket, unsigned char *InfString, unsigned short InfMsgSize, signed short CntrlField);
Advertisement
Add Comment
Please, Sign In to add comment