new: add mptp packet verify functions
This commit is contained in:
@ -8,24 +8,30 @@ typedef enum lm_error {
|
||||
LM_ERR_URLHostLarge = 4,
|
||||
LM_ERR_URLPathLarge = 5,
|
||||
LM_ERR_URLBadHost = 6,
|
||||
LM_ERR_URLBadPath = 7,
|
||||
LM_ERR_URLPortUnknown = 8,
|
||||
LM_ERR_URLBadPort = 9,
|
||||
LM_ERR_PoolNoSupport = 10,
|
||||
LM_ERR_URLEnd = 11,
|
||||
LM_ERR_MPTPBadVersion = 12,
|
||||
LM_ERR_MPTPBadCode = 13,
|
||||
LM_ERR_MPTPBadUrl = 14,
|
||||
LM_ERR_MPTPHostFail = 15,
|
||||
LM_ERR_MPTPSocketFail = 16,
|
||||
LM_ERR_MPTPConnectFail = 17,
|
||||
LM_ERR_MPTPRecvFail = 18,
|
||||
LM_ERR_MPTPSendFail = 19,
|
||||
LM_ERR_MPTPBadChunk = 29,
|
||||
LM_ERR_MPTPSetsockopt = 30,
|
||||
LM_ERR_MPTPTimeout = 31,
|
||||
LM_ERR_MPTPBindFail = 32,
|
||||
LM_ERR_ArgNULL = 33,
|
||||
LM_ERR_URLBadPort = 7,
|
||||
LM_ERR_URLBadPath = 8,
|
||||
LM_ERR_URLPortUnknown = 9,
|
||||
LM_ERR_BadPort = 10,
|
||||
LM_ERR_BadHost = 11,
|
||||
LM_ERR_PoolNoSupport = 12,
|
||||
LM_ERR_URLEnd = 13,
|
||||
LM_ERR_MPTPBadVersion = 14,
|
||||
LM_ERR_MPTPBadCode = 15,
|
||||
LM_ERR_MPTPBadUrl = 16,
|
||||
LM_ERR_MPTPHostFail = 17,
|
||||
LM_ERR_MPTPSocketFail = 18,
|
||||
LM_ERR_MPTPConnectFail = 19,
|
||||
LM_ERR_MPTPRecvFail = 20,
|
||||
LM_ERR_MPTPSendFail = 21,
|
||||
LM_ERR_MPTPBadChunk = 22,
|
||||
LM_ERR_MPTPSetsockopt = 23,
|
||||
LM_ERR_MPTPTimeout = 24,
|
||||
LM_ERR_MPTPBindFail = 25,
|
||||
LM_ERR_ArgNULL = 26,
|
||||
LM_ERR_MPTPNotResponse = 27,
|
||||
LM_ERR_MPTPNotRequest = 28,
|
||||
LM_ERR_MPTPNotLast = 29,
|
||||
LM_ERR_NoPort = 30,
|
||||
} lm_error_t;
|
||||
|
||||
typedef struct lm_error_desc {
|
||||
|
@ -69,8 +69,7 @@
|
||||
// clang-format on
|
||||
|
||||
#define MPTP_VERSION_SUPPORTED 0
|
||||
#define MPTP_VERSION_MAX 15 // 4 bits
|
||||
#define MPTP_CODE_MAX 4 // 2 bits
|
||||
#define MPTP_CODE_MAX 3 // 2 bits
|
||||
#define MPTP_CHUNK_MAX 256
|
||||
#define MPTP_TIMEOUT 10
|
||||
|
||||
@ -101,24 +100,25 @@ typedef struct lm_mptp {
|
||||
char data[MPTP_CHUNK_MAX];
|
||||
} lm_mptp_t;
|
||||
|
||||
#define MPTP_FLAGS_VERSION(m) ((m)->header.flags & 0xFF00) >> 8
|
||||
#define MPTP_FLAGS_REQUEST(m) ((m)->header.flags & 0x0080) >> 1
|
||||
#define MPTP_FLAGS_TYPE(m) ((m)->header.flags & 0x0070) >> 4
|
||||
#define MPTP_FLAGS_LAST(m) ((m)->header.flags & 0x0008) >> 3
|
||||
#define MPTP_FLAGS_VERSION(m) (((m)->header.flags & 0xFF00) >> 8)
|
||||
#define MPTP_FLAGS_TYPE(m) (((m)->header.flags & 0x0080) >> 1)
|
||||
#define MPTP_FLAGS_CODE(m) (((m)->header.flags & 0x0070) >> 4)
|
||||
#define MPTP_FLAGS_LAST(m) (((m)->header.flags & 0x0008) >> 3)
|
||||
|
||||
#define MPTP_IS_REQUEST(m) MPTP_FLAGS_REQUEST(m) == 0
|
||||
#define MPTP_IS_LAST(m) MPTP_FLAGS_LAST(m) == 1
|
||||
#define MPTP_IS_REQUEST(m) (MPTP_FLAGS_TYPE(m) == 0)
|
||||
#define MPTP_IS_LAST(m) (MPTP_FLAGS_LAST(m) == 1)
|
||||
|
||||
bool lm_mptp_packet_init(lm_mptp_t *packet, bool is_request, uint8_t code, bool is_last);
|
||||
int lm_mptp_socket(char *addr, uint16_t port, struct sockaddr *saddr);
|
||||
bool lm_mptp_verify(lm_mptp_t *packet);
|
||||
void lm_mptp_close(int sock);
|
||||
|
||||
int lm_mptp_client_connect(char *addr, uint16_t port);
|
||||
bool lm_mptp_client_verify(int sock, lm_mptp_t *packet); // not implemented
|
||||
bool lm_mptp_client_verify(lm_mptp_t *packet);
|
||||
bool lm_mptp_client_send(int sock, lm_mptp_t *packet);
|
||||
bool lm_mptp_client_recv(int sock, lm_mptp_t *packet);
|
||||
|
||||
int lm_mptp_server_listen(char *addr, uint16_t port);
|
||||
bool lm_mptp_server_verify(int sock, lm_mptp_t *packet, struct sockaddr *addr); // not implemented
|
||||
bool lm_mptp_server_verify(lm_mptp_t *packet);
|
||||
bool lm_mptp_server_recv(int sock, lm_mptp_t *packet, struct sockaddr *addr);
|
||||
bool lm_mptp_server_send(int sock, lm_mptp_t *packet, struct sockaddr *adrr);
|
||||
|
@ -6,3 +6,4 @@ bool lm_ctx_pool_add(lm_ctx_t *ctx, char *name, char *url);
|
||||
bool lm_ctx_pool_del(lm_ctx_t *ctx, char *name);
|
||||
void lm_ctx_pool_clear(lm_ctx_t *ctx);
|
||||
void lm_ctx_pool_test(lm_ctx_t *ctx);
|
||||
bool lm_ctx_pool_serve(lm_ctx_t *ctx, char *addr);
|
||||
|
@ -11,7 +11,8 @@ typedef struct lm_url {
|
||||
char protocol[URL_PROTOCOL_MAX + 1];
|
||||
char *host;
|
||||
char *path;
|
||||
bool empty;
|
||||
} lm_url_t;
|
||||
|
||||
bool lm_url_parse(lm_url_t *url, char *str);
|
||||
bool lm_url_init(lm_url_t *url, char *str);
|
||||
void lm_url_free(lm_url_t *url);
|
||||
|
@ -6,6 +6,7 @@
|
||||
#define _(x) gettext(x)
|
||||
|
||||
void pdebug(lm_ctx_t *ctx, const char *func, const char *fmt, ...);
|
||||
bool parse_host(char *addr, char *host, uint16_t *port);
|
||||
bool contains(char *str, char s);
|
||||
bool eq(char *s1, char *s2);
|
||||
bool is_letter(char c);
|
||||
|
Reference in New Issue
Block a user