TVDevice::TVDevice() { ////////////////////////////////////// // Control Ponit ////////////////////////////////////// ctrlPoint = new ControlPoint(); ctrlPoint->addNotifyListener(this); ctrlPoint->addSearchResponseListener(this); ctrlPoint->addEventListener(this); ////////////////////////////////////// // Device ////////////////////////////////////// try { tvDev = new Device(DESCRIPTION_FILE_NAME); Action *getPowerAction = tvDev->getAction("GetPower"); getPowerAction->setActionListener(this); Action *setPowerAction = tvDev->getAction("SetPower"); setPowerAction->setActionListener(this); ServiceList *serviceList = tvDev->getServiceList(); Service *service = serviceList->getService(0); service->setQueryListener(this); } catch (InvalidDescriptionException e) { cerr << e.getMessage() << endl; } }
void PrintDeviceInfo(Device *dev, int indent) { string indentStr; GetIndentString(indent, indentStr); const char *devName = dev->getFriendlyName(); cout << indentStr << devName << endl; int i, n, j; ServiceList *serviceList = dev->getServiceList(); int serviceCnt = serviceList->size(); for (n=0; n<serviceCnt; n++) { Service *service = serviceList->getService(n); cout << indentStr << " service[" << n << "] = "<< service->getServiceType() << endl; ActionList *actionList = service->getActionList(); int actionCnt = actionList->size(); for (i=0; i<actionCnt; i++) { Action *action = actionList->getAction(i); cout << indentStr << " action[" << i << "] = "<< action->getName() << endl; ArgumentList *argList = action->getArgumentList(); int argCnt = argList->size(); for (j=0; j<argCnt; j++) { Argument *arg = argList->getArgument(j); cout << indentStr << " arg[" << j << "] = " << arg->getName() << "(" << arg->getDirection() << ")"; StateVariable *stateVar = arg->getRelatedStateVariable(); if (stateVar != NULL) cout << " - " << stateVar->getName(); cout << endl; } } ServiceStateTable *stateTable = service->getServiceStateTable(); int varCnt = stateTable->size(); for (i=0; i<varCnt; i++) { StateVariable *stateVar = stateTable->getStateVariable(i); cout << indentStr << " stateVar[" << i << "] = " << stateVar->getName() << endl; AllowedValueList *valueList = stateVar->getAllowedValueList(); int valueListCnt = valueList->size(); if (0 < valueListCnt) { for (j=0; j<valueListCnt; j++) cout << indentStr << " AllowedValueList[" << j << "] = " << valueList->getAllowedValue(j) << endl; } AllowedValueRange *valueRange = stateVar->getAllowedValueRange(); if (valueRange != NULL) { cout << indentStr << " AllowedRange[minimum] = " << valueRange->getMinimum() << endl; cout << indentStr << " AllowedRange[maximum] = " << valueRange->getMaximum() << endl; cout << indentStr << " AllowedRange[step] = " << valueRange->getStep() << endl; } } } }
TestDevice::TestDevice() { loadDescription(DEVICE_DESCRIPTION); Service *counterService = getService("urn:schemas-upnp-org:service:count:1"); counterService->loadSCPD(SERVICE_DESCRIPTION); Action *getCountAction = getAction("GetCount"); getCountAction->setActionListener(this); Action *setCountAction = getAction("SetCount"); setCountAction->setActionListener(this); ServiceList *serviceList = getServiceList(); Service *service = serviceList->getService(0); service->setQueryListener(this); }
void ControlPoint::unsubscribe(Device *device) { int n; ServiceList *serviceList = device->getServiceList(); int serviceCnt = serviceList->size(); for (n = 0; n < serviceCnt; n++) { Service *service = serviceList->getService(n); if (service->hasSID() == true) unsubscribe(service); } DeviceList *childDevList = device->getDeviceList(); int childDevCnt = childDevList->size(); for (n = 0; n < childDevCnt; n++) { Device *cdev = childDevList->getDevice(n); unsubscribe(cdev); } }
void ControlPoint::renewSubscriberService(Device *dev, long timeout) { int n; ServiceList *serviceList = dev->getServiceList(); int serviceCnt = serviceList->size(); for (n = 0; n < serviceCnt; n++) { Service *service = serviceList->getService(n); if (service->isSubscribed() == false) continue; const char *sid = service->getSID(); bool isRenewed = subscribe(service, sid, timeout); if (isRenewed == false) subscribe(service, timeout); } DeviceList *cdevList = dev->getDeviceList(); int cdevCnt = cdevList->size(); for (n = 0; n < cdevCnt; n++) { Device *cdev = cdevList->getDevice(n); renewSubscriberService(cdev, timeout); } }
ClockDevice::ClockDevice() : Device(CLOCK_DESCRIPTION_FILE_NAME) #else ClockDevice::ClockDevice() : Device() #endif { #if !defined(USE_CLOCK_DESCRIPTION_FILE) loadDescription(CLOCK_DEVICE_DESCRIPTION); Service *timeService = getService("urn:schemas-upnp-org:service:timer:1"); timeService->loadSCPD(CLOCK_SERVICE_DESCRIPTION); #endif Action *getTimeAction = getAction("GetTime"); getTimeAction->setActionListener(this); Action *setTimeAction = getAction("SetTime"); setTimeAction->setActionListener(this); ServiceList *serviceList = getServiceList(); Service *service = serviceList->getService(0); service->setQueryListener(this); m_timeVar = getStateVariable("Time"); setLeaseTime(60); } //////////////////////////////////////////////// // ActionListener //////////////////////////////////////////////// bool ClockDevice::actionControlReceived(Action *action) { const char *actionName = action->getName(); if (strcmp("GetTime", actionName) == 0) { std::string dateStr; Clock clock; clock.toString(dateStr); Argument *timeArg = action->getArgument("CurrentTime"); timeArg->setValue(dateStr.c_str()); return true; } if (strcmp(actionName, "SetTime") == 0) { Argument *timeArg = action->getArgument("NewTime"); const char *newTime = timeArg->getValue(); Argument *resultArg = action->getArgument("Result"); std::ostringstream valbuf; valbuf << "Not implemented (" << newTime << ")"; resultArg->setValue(valbuf.str().c_str()); return true; } return false; } //////////////////////////////////////////////// // QueryListener //////////////////////////////////////////////// bool ClockDevice::queryControlReceived(StateVariable *stateVar) { const char *varName = stateVar->getName(); Clock clock; string clockVal; stateVar->setValue(clock.toString(clockVal)); return true; } //////////////////////////////////////////////// // HttpRequestListner //////////////////////////////////////////////// //void ClockDevice::httpRequestRecieved(HTTPRequest *httpReq) HTTP::StatusCode ClockDevice::httpRequestRecieved(HTTPRequest *httpReq) { ParameterList paramList; httpReq->getParameterList(paramList); for (int n=0; n<paramList.size(); n++) { Parameter *param = paramList.getParameter(n); cout << "[" << n << "] : " << param->getName() << " = " << param->getValue() << endl; } string uri; httpReq->getURI(uri); if (uri.find(CLOCK_PRESENTATION_URI) == string::npos) { Device::httpRequestRecieved(httpReq); return HTTP::OK_REQUEST; //return ; } string clockStr; Clock clock; clock.toString(clockStr); string contents; contents = "<HTML><BODY><H1>"; contents += clockStr; contents += "</H1></BODY></HTML>"; HTTPResponse httpRes; httpRes.setStatusCode(HTTP::OK_REQUEST); httpRes.setContent(contents); return httpReq->post(&httpRes) ? HTTP::OK_REQUEST : HTTP::INTERNAL_SERVER_ERROR; }