Initial commit.
FossilOrigin-Name: c2de1837d367aca63e691fdbc16a3672fdd63ba5f3b689a648a953bf91ffbfbf
This commit is contained in:
parent
164a44b5bc
commit
0d031ac26f
35
src/capwap/cw_readelem_result_code.c
Normal file
35
src/capwap/cw_readelem_result_code.c
Normal file
@ -0,0 +1,35 @@
|
||||
/*
|
||||
This file is part of libcapwap.
|
||||
|
||||
libcapwap is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
libcapwap is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Foobar. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
*/
|
||||
|
||||
#include "capwap.h"
|
||||
|
||||
#include "cw_log.h"
|
||||
|
||||
int cw_readelem_result_code(uint32_t *result_code, int type, uint8_t * msgelem, int len)
|
||||
{
|
||||
if (type != CWMSGELEM_RESULT_CODE)
|
||||
return 0;
|
||||
|
||||
if (len!=4){
|
||||
cw_dbg(DBG_CW_RFC,"Result code msg elem has wrong size, type=%d,len=%d",type,len);
|
||||
return 0;
|
||||
}
|
||||
*result_code=ntohl(*((uint32_t*)msgelem));
|
||||
return 1;
|
||||
}
|
||||
|
69
src/capwap/cw_util.c
Normal file
69
src/capwap/cw_util.c
Normal file
@ -0,0 +1,69 @@
|
||||
/*
|
||||
This file is part of libcapwap.
|
||||
|
||||
libcapwap is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
libcapwap is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Foobar. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "cw_util.h"
|
||||
#include "cw_log.h"
|
||||
#include "capwap.h"
|
||||
|
||||
void cw_mand_elem_found(int *l,int type)
|
||||
{
|
||||
if (!cw_dbg_is_level(DBG_CW_RFC))
|
||||
return;
|
||||
|
||||
int i;
|
||||
for (i=0; l[i]!=-1; i++){
|
||||
if(l[i]==type){
|
||||
l[i]=0;
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void cw_get_missing_mand_elems(char *dst, int *l)
|
||||
{
|
||||
if (!cw_dbg_is_level(DBG_CW_RFC))
|
||||
return;
|
||||
|
||||
char *s = dst;
|
||||
int i;
|
||||
const char * k = "";
|
||||
for (i=0; l[i]!=-1; i++){
|
||||
if(l[i]){
|
||||
s += sprintf(s,"%s[%s]",k,cw_msgelemtostr(l[i]));
|
||||
k=",";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
int cw_is_missing_mand_elems(int *l)
|
||||
{
|
||||
int i;
|
||||
for (i=0; l[i]!=-1; i++){
|
||||
if(l[i]){
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
74
src/capwap/cwread_change_state_event_request.c
Normal file
74
src/capwap/cwread_change_state_event_request.c
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
This file is part of libcapwap.
|
||||
|
||||
libcapwap is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
libcapwap is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Foobar. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "capwap.h"
|
||||
#include "cw_log.h"
|
||||
#include "cw_util.h"
|
||||
|
||||
struct eparm {
|
||||
int * mand;
|
||||
uint32_t result_code;
|
||||
struct wtpinfo * wtpinfo;
|
||||
};
|
||||
|
||||
|
||||
static int readelem(void * eparm,int type,uint8_t* msgelem,int len)
|
||||
{
|
||||
struct eparm * e = (struct eparm*)eparm;
|
||||
cw_dbg(DBG_CW_MSGELEM,"Reading conf staus req msgelem, type=%d - %s ,len=%d\n",type,cw_msgelemtostr(type),len);
|
||||
|
||||
/* mandatory elements */
|
||||
if (cw_readelem_result_code(&e->result_code,type,msgelem,len))
|
||||
goto foundX;
|
||||
|
||||
return 0;
|
||||
|
||||
foundX:
|
||||
cw_mand_elem_found(e->mand,type);
|
||||
return 1;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
int cwread_change_state_event_request(struct wtpinfo * wtpinfo, uint8_t * msg, int len)
|
||||
{
|
||||
int mand[] = {
|
||||
CWMSGELEM_RADIO_OPERATIONAL_STATE,
|
||||
CWMSGELEM_RESULT_CODE,
|
||||
-1};
|
||||
|
||||
struct eparm eparm;
|
||||
eparm.wtpinfo = wtpinfo;
|
||||
eparm.mand=mand;
|
||||
|
||||
cw_dbg(DBG_CW_MSGELEM,"Reading change state event request, len=%d",len);
|
||||
cw_foreach_msgelem(msg,len,readelem,&eparm);
|
||||
|
||||
|
||||
if (cw_is_missing_mand_elems(mand)){
|
||||
char str[512];
|
||||
cw_get_missing_mand_elems(str,mand);
|
||||
cw_dbg(DBG_CW_RFC, "Missing msgelems in change state event request: %s",str);
|
||||
}
|
||||
return eparm.result_code;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user