/****************************************
* cg_upnp_event_notify_request_setpropertysetnode
****************************************/
BOOL cg_upnp_event_notify_request_setpropertysetnode(CgUpnpNotifyRequest *notifyReq, CgUpnpSubscriber *sub, /* CgUpnpService */void *pservice, CgUpnpStateVariable *statVar)
{
    CgHttpRequest *httpReq;
    CgXmlNode *propSetNode;
    CgUpnpService* service;
  char server[CG_UPNP_SEVERNAME_MAXLEN];

    cg_log_debug_l4("Entering...\n");

    service = (CgUpnpService *)pservice;

    httpReq = cg_soap_request_gethttprequest(notifyReq);

    cg_http_request_setmethod(httpReq, CG_HTTP_NOTIFY);
    cg_http_request_setconnection(httpReq, CG_HTTP_CLOSE);
    cg_http_request_seturi(httpReq, cg_upnp_subscriber_getdeliverypath(sub));
    cg_http_request_sethost(httpReq, cg_upnp_subscriber_getdeliveryhost(sub), cg_upnp_subscriber_getdeliveryport(sub));
  cg_upnp_getservername(server, sizeof(server));
  cg_http_packet_setheadervalue((CgHttpPacket*)httpReq,
                                  CG_HTTP_SERVER,
                                  server);
    cg_upnp_event_notify_request_setnt(notifyReq, CG_UPNP_NT_EVENT);
    cg_upnp_event_notify_request_setnts(notifyReq, CG_UPNP_NTS_PROPCHANGE);
    cg_upnp_event_notify_request_setsid(notifyReq, cg_upnp_subscriber_getsid(sub));
    cg_upnp_event_notify_request_setseq(notifyReq, cg_upnp_subscriber_getnotifycount(sub));

    propSetNode = cg_upnp_event_notify_request_createpropertysetnode(service, statVar);
    cg_soap_request_setcontent(notifyReq, propSetNode);
    cg_xml_node_delete(propSetNode);

    cg_log_debug_l4("Leaving...\n");

    return TRUE;
}
示例#2
0
BOOL cg_upnp_action_performlistner(CgUpnpAction *action, CgUpnpActionRequest *actionReq)
{
	CG_UPNP_ACTION_LISTNER listener;
	CgUpnpActionResponse *actionRes;
	CgHttpRequest *actionReqHttpReq;
	CgHttpResponse *actionResHttpRes;
	
	cg_log_debug_l4("Entering...\n");

	listener = cg_upnp_action_getlistner(action);
	if (listener == NULL)
		return FALSE;

	actionRes = cg_upnp_control_action_response_new();
	
	cg_upnp_action_setstatuscode(action, CG_UPNP_STATUS_INVALID_ACTION);
	cg_upnp_action_setstatusdescription(action, cg_upnp_status_code2string(CG_UPNP_STATUS_INVALID_ACTION));

	cg_upnp_action_clearoutputargumentvalues(action);
	
	if (listener(action) == TRUE)
		cg_upnp_control_action_response_setresponse(actionRes, action);
	else
		cg_upnp_control_soap_response_setfaultresponse(cg_upnp_control_action_response_getsoapresponse(actionRes), cg_upnp_action_getstatuscode(action), cg_upnp_action_getstatusdescription(action));
	
	actionReqHttpReq = cg_soap_request_gethttprequest(cg_upnp_control_action_request_getsoaprequest(actionReq));
	actionResHttpRes = cg_soap_response_gethttpresponse(cg_upnp_control_action_response_getsoapresponse(actionRes));
	cg_http_request_postresponse(actionReqHttpReq, actionResHttpRes);	

	cg_upnp_control_action_response_delete(actionRes);
	
	cg_log_debug_l4("Leaving...\n");

	return TRUE;
}
void cg_upnp_control_request_sethostfromservice(CgSoapRequest *soapReq, CgUpnpService *service)
{
	CgHttpRequest *httpReq;
	CgNetURL *ctrlURL;
	
	cg_log_debug_l4("Entering...\n");

	httpReq = cg_soap_request_gethttprequest(soapReq);

	ctrlURL = cg_upnp_service_getcontrolurl(service);

	cg_log_debug_s("Ctrl URL: %s - %d -%s", 
			cg_net_url_gethost(ctrlURL), 
			cg_net_url_getport(ctrlURL), 
			cg_net_url_getpath(ctrlURL));

	//cg_http_request_seturi(httpReq, cg_xml_node_getchildnodevalue(cg_upnp_service_getservicenode(service), CG_UPNP_SERVICE_CONTROL_URL));
	cg_http_request_seturi(httpReq, cg_net_url_getrequest(ctrlURL));

	/**** Host ****/
	cg_net_url_delete(httpReq->postURL);
	httpReq->postURL = ctrlURL;

	cg_log_debug_s("Post URL: %s - %d -%s", 
			cg_net_url_gethost(httpReq->postURL), 
			cg_net_url_getport(httpReq->postURL), 
			cg_net_url_getpath(httpReq->postURL));

	cg_log_debug_l4("Leaving...\n");
}
void cg_upnp_control_soap_request_initializeenvelopenode(CgSoapRequest *soapReq)
{
	CgXmlNodeList *rootNodeList;
	CgHttpRequest *httpReq;

	cg_log_debug_l4("Entering...\n");

	rootNodeList = cg_soap_request_getrootnoodelist(soapReq);
	cg_xml_nodelist_add(rootNodeList, cg_soap_createenvelopebodynode());

	httpReq = cg_soap_request_gethttprequest(soapReq);
	cg_http_request_setcontenttype(httpReq, CG_SOAP_CONTENT_TYPE);

	cg_log_debug_l4("Leaving...\n");
}
void cg_soap_request_setcontent(CgSoapRequest *soapReq, CgXmlNode *node)
{
    CgHttpRequest *httpReq;

    cg_log_debug_l4("Entering...\n");

    httpReq = cg_soap_request_gethttprequest(soapReq);

    /**** content type ****/
    cg_http_request_setcontenttype(httpReq, CG_XML_CONTENT_TYPE);

    /**** content ****/
    cg_http_request_appendncontent(httpReq, CG_SOAP_VERSION_HEADER,
                    cg_strlen(CG_SOAP_VERSION_HEADER));
    cg_http_request_appendncontent(httpReq, CG_XML_CONTENT_LF,
                    cg_strlen(CG_XML_CONTENT_LF));
    cg_xml_node_tostring(node, TRUE, httpReq->content);

    /**** content length ****/
    cg_http_request_setcontentlength(httpReq,
                     cg_string_length(httpReq->content));

    cg_log_debug_l4("Leaving...\n");
}