31 #include "hostIf_utils.h"
34 #include "safec_lib.h"
38 updateCallback DHCPv4ClientReqHandler::mUpdateCallback = NULL;
39 int DHCPv4ClientReqHandler::curNumOfDHCPv4Clients = 0;
41 msgHandler* DHCPv4ClientReqHandler::getInstance()
43 hostIf_DHCPv4Client::getLock();
46 hostIf_DHCPv4Client::releaseLock();
51 void DHCPv4ClientReqHandler::reset()
53 hostIf_DHCPv4Client::getLock();
54 curNumOfDHCPv4Clients = 0;
55 hostIf_DHCPv4Client::releaseLock();
83 RDK_LOG(RDK_LOG_DEBUG,LOG_TR69HOSTIF,
"[%s()] DHCPv4 manager DeInitializing\n", __FUNCTION__);
84 hostIf_DHCPv4Client::closeAllInstances();
103 int ret = NOT_HANDLED;
105 RDK_LOG(RDK_LOG_INFO,LOG_TR69HOSTIF,
"[%s:%s] Found string as %s. Set command not supported.\n",
106 __FUNCTION__, __FILE__, stMsgData->
paramName);
107 stMsgData->
faultCode = fcAttemptToSetaNonWritableParameter;
125 int ret = NOT_HANDLED;
126 const char *pSetting;
127 int instanceNumber = 0;
128 hostIf_DHCPv4Client::getLock();
130 RDK_LOG(RDK_LOG_TRACE1,LOG_TR69HOSTIF,
"[%s:%s:%d] Found string as %s\n", __FUNCTION__, __FILE__, __LINE__, stMsgData->
paramName);
131 if(strcasecmp(stMsgData->
paramName,
"Device.DHCPv4.ClientNumberOfEntries") == 0)
133 ret = hostIf_DHCPv4Client::get_Device_DHCPv4_ClientNumberOfEntries(stMsgData);
135 else if(matchComponent(stMsgData->
paramName,
"Device.DHCPv4.Client",&pSetting,instanceNumber))
141 if(strcasecmp(pSetting,
"Interface") == 0)
145 else if(strcasecmp(pSetting,
"IPRouters") == 0)
149 else if(strcasecmp(pSetting,
"DNSServers") == 0)
155 RDK_LOG(RDK_LOG_ERROR,LOG_TR69HOSTIF,
"[%s:%d] Parameter : \'%s\' is Not Supported \n", __FUNCTION__, __LINE__, stMsgData->
paramName);
156 stMsgData->
faultCode = fcInvalidParameterName;
163 RDK_LOG(RDK_LOG_INFO,LOG_TR69HOSTIF,
"[%s:%s:%d] hostIf_DHCPv4Client::getInstance returned NULL for instance %d,\n",
164 __FUNCTION__, __FILE__, __LINE__, instanceNumber);
169 RDK_LOG(RDK_LOG_ERROR,LOG_TR69HOSTIF,
"[%s:%d] Parameter : \'%s\' is Not Supported \n", __FUNCTION__, __LINE__, stMsgData->
paramName);
170 stMsgData->
faultCode = fcInvalidParameterName;
174 hostIf_DHCPv4Client::releaseLock();
177 int DHCPv4ClientReqHandler::handleGetAttributesMsg(
HOSTIF_MsgData_t *stMsgData)
179 int ret = NOT_HANDLED;
180 int instanceNumber = 0;
182 hostIf_DHCPv4Client::getLock();
187 hostIf_DHCPv4Client::releaseLock();
191 GHashTable* notifyhash = pIface->getNotifyHash();
192 if(notifyhash != NULL)
194 int* notifyvalue = (
int*) g_hash_table_lookup(notifyhash,stMsgData->
paramName);
196 stMsgData->
paramtype = hostIf_IntegerType;
203 hostIf_DHCPv4Client::releaseLock();
207 int DHCPv4ClientReqHandler::handleSetAttributesMsg(
HOSTIF_MsgData_t *stMsgData)
209 int ret = NOT_HANDLED;
210 int instanceNumber = 0;
212 hostIf_DHCPv4Client::getLock();
217 hostIf_DHCPv4Client::releaseLock();
220 GHashTable* notifyhash = pIface->getNotifyHash();
221 if(notifyhash != NULL)
224 notifyValuePtr = (
int*) malloc(1 *
sizeof(
int));
230 notifyKey = (
char*) malloc(
sizeof(
char)*strlen(stMsgData->
paramName)+1);
231 if(NULL != notifyValuePtr)
240 g_hash_table_insert(notifyhash,notifyKey,notifyValuePtr);
246 RDK_LOG(RDK_LOG_ERROR,LOG_TR69HOSTIF,
"[%s:%s:%d] EthernetClientReqHandler Not able to allocate Notify pointer %s\n", __FUNCTION__, __FILE__, __LINE__, stMsgData->
paramName);
252 RDK_LOG(RDK_LOG_ERROR,LOG_TR69HOSTIF,
"[%s:%s:%d] EthernetClientReqHandler Not able to get notifyhash %s\n", __FUNCTION__, __FILE__, __LINE__, stMsgData->
paramName);
254 hostIf_DHCPv4Client::releaseLock();
258 void DHCPv4ClientReqHandler::registerUpdateCallback(updateCallback cb)
260 mUpdateCallback = cb;
263 void DHCPv4ClientReqHandler::checkForUpdates()
269 char tmp_buff[TR69HOSTIFMGR_MAX_PARAM_LEN];
270 hostIf_DHCPv4Client::getLock();
271 int instanceNumber = 0;
272 GHashTable* notifyhash = NULL;
274 memset(&msgData,0,
sizeof(msgData));
275 memset(tmp_buff,0,TR69HOSTIFMGR_MAX_PARAM_LEN);
276 RDK_LOG(RDK_LOG_DEBUG,LOG_TR69HOSTIF,
"[%s:%s] Entering..\n", __FILE__, __FUNCTION__);
279 if(hostIf_DHCPv4Client::get_Device_DHCPv4_ClientNumberOfEntries(&msgData) == OK)
282 char tmp[TR69HOSTIFMGR_MAX_PARAM_LEN] =
"";
283 sprintf(tmp_buff,
"Device.DHCPv4.Client");
284 while(curNumOfDHCPv4Clients > tmpNoDev)
286 sprintf(tmp,
"%s.%d.",tmp_buff,tmpNoDev);
288 RDK_LOG(RDK_LOG_DEBUG,LOG_TR69HOSTIF,
"[%s:%s] ClientNumberOfEntries Removed Event..\n", __FILE__, __FUNCTION__);
292 while(curNumOfDHCPv4Clients < tmpNoDev)
294 sprintf(tmp,
"%s.",tmp_buff);
296 RDK_LOG(RDK_LOG_DEBUG,LOG_TR69HOSTIF,
"[%s:%s] ClientNumberOfEntries Added Event..\n", __FILE__, __FUNCTION__);
300 curNumOfDHCPv4Clients = get_int(msgData.
paramValue);
302 #ifdef HAVE_VALUE_CHANGE_EVENT
305 if(NULL != pDHCPv4Client)
307 notifyhash = pDHCPv4Client->getNotifyHash();
311 RDK_LOG(RDK_LOG_ERROR,LOG_TR69HOSTIF,
"[%s:%s] Unable to get DHCPV4Client Instance\n", __FUNCTION__, __FILE__);
315 if(NULL != notifyhash)
317 GHashTableIter notifyHashIterator;
319 gpointer notifyEnable;
322 g_hash_table_iter_init (¬ifyHashIterator, notifyhash);
323 while (g_hash_table_iter_next (¬ifyHashIterator, ¶mName, ¬ifyEnable))
325 int* isNotifyEnabled = (
int *)notifyEnable;
327 if(matchComponent((
const char*)paramName,
"Device.DHCPv4.Client",&pSetting,instanceNumber))
332 if (strcasecmp(pSetting,
"Interface") == 0)
334 memset(&msgData,0,
sizeof(msgData));
339 if(mUpdateCallback && (*isNotifyEnabled == 1))
345 if (strcasecmp(pSetting,
"IPRouters") == 0)
347 memset(&msgData,0,
sizeof(msgData));
352 if(mUpdateCallback && (*isNotifyEnabled == 1))
358 if (strcasecmp(pSetting,
"DNSServers") == 0)
360 memset(&msgData,0,
sizeof(msgData));
365 if(mUpdateCallback && (*isNotifyEnabled == 1))
377 hostIf_DHCPv4Client::releaseLock();