#include "mq_cmd.h" #define MQ_CMD_MSG_SIZE 8192 //last string element should be string ;] mq_cmd* mq_cmd_create(int id, char *cmd, size_t cmd_sz, char *param, size_t param_sz) { mq_cmd *ret = NULL; if (cmd == NULL) { PERM(); return NULL; } if (param == NULL) { PERM(); return NULL; } ret = malloc(sizeof(mq_cmd)); if (ret == NULL) { ENL(); return NULL; } memset(ret,0, sizeof(mq_cmd)); ret->id = id; ret->sz = MQ_CMD_MSG_SIZE; ret->buf = malloc(MQ_CMD_MSG_SIZE); if (ret->buf == NULL) { ENL(); free(ret); return NULL; } //if not null string that everything will blow up pal //cmd[cmd_sz-1] = 0x0; //param[param_sz-1] = 0x0; snprintf(ret->buf,ret->sz-1,":%d:%s: %s", id, cmd, param); return ret; } mq_cmd* mq_cmd_creates(char *str, size_t sz, int id) { mq_cmd *ret = NULL; //just naive belive everything is fine in string ret = malloc(sizeof(mq_cmd)); ret->buf = malloc(sz); if (ret->buf == NULL) { PERM(); return NULL; } ret->sz = sz; memcpy(ret->buf,str,sz); ret->id = id; return ret; } int mq_cmd_id(mq_cmd *cmd) { int i,j,strt,sz; int ret=-1; int id_parse; char buf[16]; //fix this /*:[ID]:*/ if (cmd == NULL) { PERM(); return -1; } i = 0; while ((cmd->buf[i] != 0) && (isz)) { if (cmd->buf[i] == ':') { i++; strt = i; sz = 0; while ((cmd->buf[i] != ':')&& (cmd->buf[i] != '\0')&& (isz)) { sz++; i++; } for (j=0;j<(strt+sz)||j<15;j++) { buf[j] = cmd->buf[strt+j]; } buf[j] = 0x0; id_parse = atoi(buf); return id_parse; } i++; } return -1; } //buf contains pointer to cmd //sz contains size of buf //%s formatting should work badly, writting to buf modifies cmd //be carefull int mq_cmd_cmd(mq_cmd *cmd, char **buf, size_t *sz) { size_t sz_parse; int i,j,strt,cnt,l_c; char *p; if (cmd == NULL) { PERM(); return -1; } if (buf == NULL) { PERM(); return -1; } if (sz == NULL) { PERM(); return -1; } p = cmd->buf; i = 0; l_c = 0; while ((cmd->buf[i] != 0)&&(isz)) { if (cmd->buf[i] == ':') { l_c += 1; if (l_c == 2) { i++; break; } } i++; } strt = i; cnt = 0; while ((cmd->buf[i] != 0)&&(isz)) { if (cmd->buf[i] == ':') break; cnt++; i++; } *buf = cmd->buf+strt; *sz = cnt; return 0; } int mq_cmd_param(mq_cmd *cmd, char **param, size_t *sz) { size_t sz_parse; int i,j,strt,cnt,l_c; char *p; p = cmd->buf; i = 0; l_c = 0; while ((cmd->buf[i] != 0)&&(isz)) { if (cmd->buf[i] == ':') { l_c += 1; if (l_c == 3) { i++; break; } } i++; } while ((cmd->buf[i] != 0)&&(isz)) { if (cmd->buf[i] != ' ') break; i++; } strt = i; *param = cmd->buf+strt; *sz = cmd->sz - strt+1; return 0; } size_t mq_cmd_size(mq_cmd *cmd) { if (cmd == NULL) { PERM(); return -1; } return cmd->sz; } char *mq_cmd_buf(mq_cmd *cmd) { if (cmd == NULL) { PERM(); return NULL; } return cmd->buf; } void mq_cmd_free(mq_cmd *mq) { if (mq != NULL) { free(mq->buf); mq->buf = NULL; free(mq); } } int mq_cmd_o_cmp_param(mq_cmd *cmd, char *str) { int str_sz; //get strsize from strlen() size_t buf_sz; char *buf = NULL; if (cmd == NULL) { return -1; } if (str == NULL) { return -1; } if (-1 == mq_cmd_param(cmd, &buf, &buf_sz)) { return -1; } str_sz = strlen(str); if (strncmp(buf, str, str_sz) != 0) { return -1; } return 0; } int mq_cmd_o_cmp_cmd( mq_cmd *cmd, char *str) { int str_sz; //get strsize from strlen() size_t buf_sz; char *buf = NULL; if (cmd == NULL) { PERM(); return -1; } if (str == NULL) { PERM(); return -1; } if (-1 == mq_cmd_cmd(cmd, &buf, &buf_sz)) { return -1; } str_sz = strlen(str); if (strncmp(buf, str, str_sz) != 0) { return -1; } return 0; } int mq_cmd_o_cmp_id( mq_cmd *cmd, int id) { int fret; if (cmd == NULL) { PERM(); return -1; } if (id < 0) { PERM(); return -1; } if ((fret = mq_cmd_id(cmd)) != id) { ENL(); return -1; } return 0; }