v1[1].3_Netcwmp.doc_第1页
v1[1].3_Netcwmp.doc_第2页
v1[1].3_Netcwmp.doc_第3页
v1[1].3_Netcwmp.doc_第4页
v1[1].3_Netcwmp.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Netcwmp开发手册Netcwmp介绍:Netcwmp是一款TR069 Client,已经实现了TR069规范中的一些RPC,并能满足各厂家二次开发的需求。其特点是,可以快速二次开发,仅仅需要实现较少的功能,其他都交给框架处理,就可以完成TR069的开发,大大减少了TR069的开发周期。配置ACS地址Linux系统下,cwmp.conf默认放置到/etc下,可以改变路径,在cwmpd/src/cwmpd.c中main函数里:cwmp_conf_open(/etc/cwmp.conf); /根据实际情况,更改配置文件路径在配置文件cwmp.conf中,设置acs_url的值:acs_url=http:/xxx.xxx.xxx.xxx:pppp/先了解一下参数节点的结构:struct parameter_node_stconst char * name; /参数模型的结点名称int rw;/read / writable 0可读 1可写int type;/类型,是string, int等size_tvalue_length; /参数的长度char * value; /参数值parameter_node_attr_t attr; /参数的属性parameter_node_t * parent; /父节点parameter_node_t * child; /子节点parameter_node_t * prev_sibling; /上一个兄弟节点parameter_node_t * next_sibling; /下一个兄弟节点parameter_get_handler_pt get; /Get函数,供GetParameterValues用,如果get为NULL,则返回上面value的值,如果不为NULL,则返回get函数执行的结果parameter_set_handler_pt set; /Set函数,供SetParameterValues用,如果Set为NULL,则将结果保存到value字段中(在内存中);如果不为NULL,则执行Set函数parameter_notify_handler_pt notify; /Notify,暂时没有用途cwmp_uint32_text0; /扩展字段cwmp_uint32_text1;cwmp_uint32_text2;cwmp_uint32_text3;cwmp_uint32_text4;解释:DeviceInfo, /参数的名字 0,/参数可读 TYPE_OBJECT, /参数的类型,有宏定义,直接使用TYPE_STRING,TYPE_OBJECT,定义在libcwmp/include/cwmp/cwmp.h中 0,/参数值的长度,定义时直接填0,除非参数的值已经固定,可以填实际的长度 NULL, /参数的值,一般为NULL,如果参数值已经知道,可以直接填实际的值 0,0,0,0, /参数的属性,默认 NULL,DeviceInfoModel,NULL,NULL, /参数的节点,如果没有子节点,直接填NULL;如果有子节点,填实际的节点;其他的parent,prev_sibling,next_sibling指针直接填NULL,框架会自动赋值 NULL,/Get函数, NULL, /Set 函数 NULL,/Notify函数,暂时没有用途 PARAMETER_NODE_V_PADDING /宏定义,默认,如何快速二次开发建立参数模型,方法是:定义parameter_node_t数据结构这是所有参数模型的基础在cwmpd/src/modules下,根据参数模型建立文件夹和文件,建立xxx.c源文件,并加入到cwmpd/src/modules/InternetGatewayDevice/InternetGatewayDevice.c中#include “xxxx.c”例如:#include DeviceInfo/DeviceInfo.c#include ManagementServer/ManagementServer.c定义数据结构,举例: DeviceInfo, 0, TYPE_OBJECT, 0, NULL, 0,0,0,0, NULL,DeviceInfoModel,NULL,NULL, /注意这里的DeviceInfoModel是子节点,如果没有子节点,则这里填NULL; DeviceInfoModel定义在DeviceInfoModel/DeviceInfoModel.c NULL, NULL, NULL, PARAMETER_NODE_V_PADDING,或者例如: Password, 0, TYPE_STRING, 0, NULL, 0,0,0,0, NULL,NULL,NULL,NULL, cpe_get_igd_ms_password, cpe_set_igd_ms_password, NULL, PARAMETER_NODE_V_PADDING ,实现GetParameterValues方法typedef char* (*parameter_get_handler_pt)(void * arg, void * pool);定义回调函数parameter_get_handler_pt ,注意要放到parameter_node_t的数据结构中例如:char* cpe_get_igd_ms_password(void * arg, void * pool) pool_t * p = (pool_t *)pool;return cwmp_conf_pool_get(p, cwmp:acs_password);参数解释:void * arg自定义参数,在libcwmp/src/cwmp.c的cwmp_get_parameter_node_value中,会调用到此回调函数,arg由cwmp_get_parameter_node_value传入。目前arg为NULL。二次开发中,可以传入自己想要的数据结构,比如MySQL的链接句柄,或其他指针,可以根据实际情况修改cwmp_get_parameter_node_value中函数的实现。void * pool 内存池的指针,返回的char*的buffer可以从此内存池中分配,从内存池中分配的内存会被框架自动释放。但建议不要从pool中分配过多的内存,临时内存可以使用malloc或本地数组。定义完get回调函数后,netcwmp框架会自动调到此方法,其他不需要做任何操作,GetParameterValues就实现了。实现SetParameterValues方法typedef int (*parameter_set_handler_pt)(void * arg, void * pool, const char * value, int length);和Get函数类似,定义函数parameter_set_handler_ptint cpe_set_igd_ms_password(void * arg, void * pool, const char * value, int length) /save password to database or config file return CWMP_OK;void * arg同Get数据,目前为NULL,如果需要,可以根据实际情况,自己修改libcwmp/src/cwmp.c中的cwmp_set_parameter_node_value函数的实现。void * pool 内存池,尽可能的少分配内存const char * value 参数的值int length 参数值的长度返回值:CWMP_OK 成功/CWMP_ERROR 失败完成Set函数定义后,SetParameterValues就实现完毕了,其他交互工作,全交给框架去处理。实现GetParameterNames方法一般不需要修改,定义好parameter_node_t参数数据结构后,框架自动实现该RPC实现Reboot方法在cwmpd/src/agent.c中,函数cwmp_agent_run_tasks中,case TASK_REBOOT_TAG:/begin reboot systemcwmp_log_debug(reboot .);cwmp_event_set_value(cwmp, INFORM_MREBOOT, 1, NULL, 0, 0, 0);cwmp_event_clear_active(cwmp);/system(reboot); /这里,打开注释实现Download方法框架已经实现RPC,只要添加下载文件后的处理方法,即可。在cwmpd/src/agent.c中,函数cwmp_agent_run_tasks中case TASK_DOWNLOAD_TAG:download_arg_t * dlarg = (download_arg_t*)data;/begin download filetime_t starttime = time(NULL); int faultcode = 0;faultcode = cwmp_agent_download_file(dlarg);time_t endtime = time(NULL);cwmp_event_set_value(cwmp, INFORM_TRANSFERCOMPLETE, 1,dlarg-cmdkey, faultcode, starttime, endtime);/在这里添加,下载后的处理方法FREE(dlarg);break;实现Upload方法框架已经实现RPC,上传前,只要准备好文件,即可。修改int cwmp_agent_upload_file(upload_arg_t * ularg)函数中的实现,即可。实现GetRPCMethods方法一般不需要修改,如果需要,可以修改libcwmp/src/session.c中的rpc_methods静态数组,即可。实现Inform方法一般不需要修改,如果需要增加上报的参数,可以修改libcwmp/src/session.c中的cwmp_session_create_inform_parameters方法HTTP摘要认证默认情况下,是关闭摘要认证的。要打开摘要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论