コード例 #1
0
void ClinkTestCase::testURIAdd()
{
	CgNetURI *uri;
    char *uriStr;
    
    uri = cg_net_uri_new();
    cg_net_uri_setvalue(uri, CLINK_TESTCASE_NET_URI_ADD_BASEPATH "/");
    cg_net_uri_addpath(uri, CLINK_TESTCASE_NET_URI_ADD_EXTRAPATH);
    uriStr = cg_net_uri_getvalue(uri);
	CPPUNIT_ASSERT(cg_streq(uriStr, CLINK_TESTCASE_NET_URI_ADD_FULLPATH));
	cg_net_uri_delete(uri);    

    uri = cg_net_uri_new();
    cg_net_uri_setvalue(uri, CLINK_TESTCASE_NET_URI_ADD_BASEPATH);
    cg_net_uri_addpath(uri, "/" CLINK_TESTCASE_NET_URI_ADD_EXTRAPATH);
    uriStr = cg_net_uri_getvalue(uri);
	CPPUNIT_ASSERT(cg_streq(uriStr, CLINK_TESTCASE_NET_URI_ADD_FULLPATH));
	cg_net_uri_delete(uri);    
    
    uri = cg_net_uri_new();
    cg_net_uri_setvalue(uri, CLINK_TESTCASE_NET_URI_ADD_BASEPATH);
    cg_net_uri_addpath(uri, CLINK_TESTCASE_NET_URI_ADD_EXTRAPATH);
    uriStr = cg_net_uri_getvalue(uri);
	CPPUNIT_ASSERT(cg_streq(uriStr, CLINK_TESTCASE_NET_URI_ADD_FULLPATH));
	cg_net_uri_delete(uri);    
}
コード例 #2
0
ファイル: ccontent.c プロジェクト: Coramo/mupnp
int cg_upnpav_content_gettype(CgUpnpAvContent* con)
{
  if (cg_streq(cg_xml_node_getname(con), CG_UPNPAV_CONTENT_ITEM_STRING))
    return CG_UPNPAV_CONTENT_ITEM;
  if (cg_streq(cg_xml_node_getname(con), CG_UPNPAV_CONTENT_CONTAINER_STRING))
    return CG_UPNPAV_CONTENT_CONTAINER;
  return CG_UPNPAV_CONTENT_NONE;
}
コード例 #3
0
ファイル: ccontent.c プロジェクト: Coramo/mupnp
void cg_upnpav_content_copy(CgUpnpAvContent* destContent, CgUpnpAvContent* srcContent)
{
  CgXmlAttribute* attr;
  CgUpnpAvContent* destNode;
  CgUpnpAvContent* srcNode;

  cg_xml_node_setname(destContent, cg_xml_node_getname(srcContent));
  cg_xml_node_setvalue(destContent, cg_xml_node_getvalue(srcContent));
  for (attr = cg_xml_node_getattributes(srcContent); attr; attr = cg_xml_attribute_next(attr))
    cg_xml_node_setattribute(destContent, cg_xml_attribute_getname(attr), cg_xml_attribute_getvalue(attr));

  for (srcNode = cg_xml_node_getchildnodes(srcContent); srcNode; srcNode = cg_xml_node_next(srcNode)) {
    if (cg_upnpav_content_gettype(srcNode) != CG_UPNPAV_CONTENT_NONE)
      continue;
    if (cg_streq(cg_xml_node_getname(srcNode), CG_UPNPAV_RESOURCE_NAME)) {
      destNode = cg_upnpav_resource_new();
      cg_upnpav_resource_copy(destNode, srcNode);
    }
    else {
      destNode = cg_upnpav_content_new();
      cg_xml_node_setname(destNode, cg_xml_node_getname(srcNode));
      cg_xml_node_setvalue(destNode, cg_xml_node_getvalue(srcNode));
      for (attr = cg_xml_node_getattributes(srcNode); attr; attr = cg_xml_attribute_next(attr))
        cg_xml_node_setattribute(destNode, cg_xml_attribute_getname(attr), cg_xml_attribute_getvalue(attr));
    }
    cg_xml_node_addchildnode(destContent, destNode);
  }
}
コード例 #4
0
BOOL cg_upnpav_dms_queryreceived(CgUpnpStateVariable *statVar)
{
    CgUpnpDevice *dev;
    CgUpnpService *service;
    CgUpnpAvServer *dms;
    CG_UPNPAV_STATEVARIABLE_LISTNER userQueryListener;

    service = cg_upnp_statevariable_getservice(statVar);
    if (!service)
        return FALSE;

    dev = (CgUpnpDevice *)cg_upnp_service_getdevice(service);
    if (!dev)
        return FALSE;

    dms = (CgUpnpAvServer *)cg_upnp_device_getuserdata(dev);
    if (!dms)
        return FALSE;

    userQueryListener = cg_upnpav_dms_getquerylistener(dms);
    if (userQueryListener) {
        if (userQueryListener(statVar))
            return TRUE;
    }

    if (cg_streq(cg_upnp_service_getservicetype(service), CG_UPNPAV_DMS_CONTENTDIRECTORY_SERVICE_TYPE))
        return cg_upnpav_dms_condir_queryreceived(statVar);

    return FALSE;
}
コード例 #5
0
ファイル: ClinkTestCaseURI.cpp プロジェクト: Deanzou/DLNA
void ClinkTestCase::testURI()
{
	CgNetURI *uri = cg_net_uri_new();
	cg_net_uri_setvalue(uri, CLINK_TESTCASE_NET_URI_PATH "?" 
		CLINK_TESTCASE_NET_URI_PARAM1_NAME "=" CLINK_TESTCASE_NET_URI_PARAM1_VALUE "&"
		CLINK_TESTCASE_NET_URI_PARAM2_NAME "=" CLINK_TESTCASE_NET_URI_PARAM2_VALUE
		"#" CLINK_TESTCASE_NET_URI_FRAGMENT);
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_getpath(uri), CLINK_TESTCASE_NET_URI_PATH));
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_getquery(uri), 
		CLINK_TESTCASE_NET_URI_PARAM1_NAME "=" CLINK_TESTCASE_NET_URI_PARAM1_VALUE "&"
		CLINK_TESTCASE_NET_URI_PARAM2_NAME "=" CLINK_TESTCASE_NET_URI_PARAM2_VALUE
		));
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_getfragment(uri), CLINK_TESTCASE_NET_URI_FRAGMENT));
	CgDictionary *paramDir = cg_net_uri_getquerydictionary(uri);
	CgDictionaryElement *paramElem;
	paramElem = cg_dictionary_gets(paramDir);
	CPPUNIT_ASSERT(paramElem != NULL);
	CPPUNIT_ASSERT(cg_streq(cg_dictionary_element_getkey(paramElem), CLINK_TESTCASE_NET_URI_PARAM1_NAME));
	CPPUNIT_ASSERT(cg_streq(cg_dictionary_element_getvalue(paramElem), CLINK_TESTCASE_NET_URI_PARAM1_VALUE));
	paramElem = cg_dictionary_element_next(paramElem);
	CPPUNIT_ASSERT(paramElem != NULL);
	CPPUNIT_ASSERT(cg_streq(cg_dictionary_element_getkey(paramElem), CLINK_TESTCASE_NET_URI_PARAM2_NAME));
	CPPUNIT_ASSERT(cg_streq(cg_dictionary_element_getvalue(paramElem), CLINK_TESTCASE_NET_URI_PARAM2_VALUE));

	cg_net_uri_delete(uri);
}
コード例 #6
0
ファイル: cmediarenderer_device.c プロジェクト: Coramo/mupnp
BOOL cg_upnpav_dmr_queryreceived(CgUpnpStateVariable* statVar)
{
  CgUpnpDevice* dev;
  CgUpnpService* service;
  CgUpnpAvRenderer* dmr;
  CG_UPNPAV_STATEVARIABLE_LISTNER userQueryListener;

  service = cg_upnp_statevariable_getservice(statVar);
  if (!service)
    return FALSE;

  dev = (CgUpnpDevice*)cg_upnp_service_getdevice(service);
  if (!dev)
    return FALSE;

  dmr = (CgUpnpAvRenderer*)cg_upnp_device_getuserdata(dev);
  if (!dmr)
    return FALSE;

  userQueryListener = cg_upnpav_dmr_getquerylistener(dmr);
  if (userQueryListener) {
    if (userQueryListener(statVar))
      return TRUE;
  }

  if (cg_streq(cg_upnp_service_getservicetype(service), CG_UPNPAV_DMR_AVTRANSPORT_SERVICE_TYPE))
    return cg_upnpav_dmr_avtransport_queryreceived(statVar);

  if (cg_streq(cg_upnp_service_getservicetype(service), CG_UPNPAV_DMR_RENDERINGCONTROL_SERVICE_TYPE))
    return cg_upnpav_dmr_renderingctrl_queryreceived(statVar);

  if (cg_streq(cg_upnp_service_getservicetype(service), CG_UPNPAV_DMR_CONNECTIONMANAGER_SERVICE_TYPE))
    return cg_upnpav_dmr_conmgr_queryreceived(statVar);

  return FALSE;
}
コード例 #7
0
ファイル: cmediarenderer_device.c プロジェクト: Coramo/mupnp
BOOL cg_upnpav_dmr_actionreceived(CgUpnpAction* action)
{
  CgUpnpDevice* dev;
  CgUpnpService* service;
  CgUpnpAvRenderer* dmr;
  CG_UPNPAV_ACTION_LISTNER userActionListener;

  service = cg_upnp_action_getservice(action);
  if (!service)
    return FALSE;

  dev = (CgUpnpDevice*)cg_upnp_service_getdevice(service);
  if (!dev)
    return FALSE;

  dmr = (CgUpnpAvRenderer*)cg_upnp_device_getuserdata(dev);
  if (!dmr)
    return FALSE;

  userActionListener = cg_upnpav_dmr_getactionlistener(dmr);
  if (userActionListener) {
    if (userActionListener(action))
      return TRUE;
  }

  if (cg_streq(cg_upnp_service_getservicetype(service), CG_UPNPAV_DMR_AVTRANSPORT_SERVICE_TYPE))
    return cg_upnpav_dmr_avtransport_actionreceived(action);

  if (cg_streq(cg_upnp_service_getservicetype(service), CG_UPNPAV_DMR_RENDERINGCONTROL_SERVICE_TYPE))
    return cg_upnpav_dmr_renderingctrl_actionreceived(action);

  if (cg_streq(cg_upnp_service_getservicetype(service), CG_UPNPAV_DMR_CONNECTIONMANAGER_SERVICE_TYPE))
    return cg_upnpav_dmr_conmgr_actionreceived(action);

  return FALSE;
}
コード例 #8
0
BOOL cg_upnpav_dms_actionreceived(CgUpnpAction *action)
{
    CgUpnpDevice *dev;
    CgUpnpService *service;
    CgUpnpAvServer *dms;
    CG_UPNP_ACTION_LISTNER userActionListener;

    service = cg_upnp_action_getservice(action);
    if (!service)
        return FALSE;

    dev = (CgUpnpDevice *)cg_upnp_service_getdevice(service);
    if (!dev)
        return FALSE;

    dms = (CgUpnpAvServer *)cg_upnp_device_getuserdata(dev);
    if (!dms)
        return FALSE;

    userActionListener = cg_upnpav_dms_getactionlistener(dms);
    if (userActionListener) {
        if (userActionListener(action))
            return TRUE;
    }

    if (cg_streq(cg_upnp_service_getservicetype(service), CG_UPNPAV_DMS_CONTENTDIRECTORY_SERVICE_TYPE))
        return cg_upnpav_dms_condir_actionreceived(action);

    if (cg_streq(cg_upnp_service_getservicetype(service), CG_UPNPAV_DMS_MEDIARECEIVER_SERVICE_TYPE))
        return cg_upnpav_dms_medrec_actionreceived(action);

    if (cg_streq(cg_upnp_service_getservicetype(service), CG_UPNPAV_DMS_CONNECTIONMANAGER_SERVICE_TYPE))
        return cg_upnpav_dms_conmgr_actionreceived(action);

    return FALSE;
}
コード例 #9
0
CgDictionaryElement *cg_dictionary_getelement(CgDictionary *dir, char *key)
{
	CgDictionaryElement *dirElem;
	char *dirElemKey;

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

	if (NULL == dir || cg_strlen(key) <= 0 )
		return NULL;
	
	for (dirElem = cg_dictionary_gets(dir); dirElem != NULL; dirElem = cg_dictionary_element_next(dirElem)) {
			dirElemKey = cg_dictionary_element_getkey(dirElem);
			if (cg_strlen(dirElemKey) <= 0)
				continue;
			if (cg_streq(dirElemKey, key) == TRUE)
				return dirElem;
	}

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

	return NULL;
}
コード例 #10
0
ファイル: cconnectionmgr_service.c プロジェクト: Coramo/mupnp
BOOL cg_upnpav_dms_conmgr_actionreceived(CgUpnpAction* action)
{
  CgUpnpAvServer* dms;
  CgUpnpDevice* dev;
  char* actionName;
  CgUpnpArgument* arg;
  CgString* protocolInfos;
  CgUpnpAvProtocolInfo* protocolInfo;

  actionName = (char*)cg_upnp_action_getname(action);
  if (cg_strlen(actionName) <= 0)
    return FALSE;

  dev = (CgUpnpDevice*)cg_upnp_service_getdevice(cg_upnp_action_getservice(action));
  if (!dev)
    return FALSE;

  dms = (CgUpnpAvServer*)cg_upnp_device_getuserdata(dev);
  if (!dms)
    return FALSE;

  /* GetProtocolInfo*/
  if (cg_streq(actionName, CG_UPNPAV_DMS_CONNECTIONMANAGER_GET_PROTOCOL_INFO)) {
    arg = cg_upnp_action_getargumentbyname(action, CG_UPNPAV_DMS_CONNECTIONMANAGER_SOURCE);
    if (!arg)
      return FALSE;
    protocolInfos = cg_string_new();
    for (protocolInfo = cg_upnpav_dms_getprotocolinfos(dms); protocolInfo; protocolInfo = cg_upnpav_protocolinfo_next(protocolInfo)) {
      if (0 < cg_string_length(protocolInfos))
        cg_string_addvalue(protocolInfos, ",");
      cg_string_addvalue(protocolInfos, cg_upnpav_protocolinfo_getstring(protocolInfo));
    }
    cg_upnp_argument_setvalue(arg, cg_string_getvalue(protocolInfos));
    cg_string_delete(protocolInfos);
    return TRUE;
  }

  return FALSE;
}
コード例 #11
0
void cg_upnp_device_ssdpmessagereceived(CgUpnpDevice *dev, CgUpnpSSDPPacket *ssdpPkt, int filter)
{
    BOOL isRootDev;
    char *ssdpST;
    char *devUDN, *devType;
    char ssdpMsg[CG_UPNP_SSDP_HEADER_LINE_MAXSIZE];
    char deviceUSN[CG_UPNP_SSDP_HEADER_LINE_MAXSIZE];
#if defined WINCE
    size_t n;
#else
    int n;
#endif
    CgUpnpService *service;
    CgUpnpDevice *childDev;
    char *ssdpMXString;
    int ssdpMX;

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

    ssdpMXString = cg_http_headerlist_getvalue(ssdpPkt->headerList, CG_HTTP_MX);
    ssdpST = cg_upnp_ssdp_packet_getst(ssdpPkt);

    /* Check if this ssdp packet has already been checked + filtered */
    if (filter)
    {

        /****************************************
         * Request line
         * Check the request line for errors, this is not ideal as it currently only
         * checks for the presence of the strings and not the order.
         ***************************************/
        /**** check for M-SEARCH and return if not found ****/
        if (cg_strstr(cg_string_getvalue(ssdpPkt->dgmPkt->data), CG_HTTP_MSEARCH) < 0)
            return;
        /**** check for * and return if not found ****/
        if (cg_strstr(cg_string_getvalue(ssdpPkt->dgmPkt->data), "*") < 0)
            return;
        /**** check HTTP version and return if not found ****/
        if (cg_strstr(cg_string_getvalue(ssdpPkt->dgmPkt->data),  CG_HTTP_VER11) < 0)
            return;

        /****************************************
         * check HOST header, should always be 239.255.255.250:1900, return if incorrect
         ***************************************/
        if (cg_strcmp(cg_upnp_ssdp_packet_gethost(ssdpPkt), CG_UPNP_SSDP_MULTICAST_ADDRESS) != 0)
            return;

        /****************************************
         * check MAN header, return if incorrect
         ***************************************/
        if (cg_upnp_ssdp_packet_isdiscover(ssdpPkt) == FALSE)
            return;

        /****************************************
         * check MX header, return if incorrect
         ***************************************/
        if (ssdpMXString == NULL || cg_strlen(ssdpMXString)==0)
            /* return if the MX value does not exist or is empty */
            return;
        /* check if MX value is not an integer */
        for (n=0; n<strlen(ssdpMXString); n++) {
            if (isdigit(ssdpMXString[n]) == 0)
                /* MX value contains a non-digit so is invalid */
                return;
        }

        /****************************************
         * check ST header and if empty return
         ***************************************/
        if (cg_strlen(ssdpST) <= 0)
            return;

        /* Check if we have received this search recently
         * and ignore duplicates. */
        if ( filter_duplicate_m_search(ssdpPkt) )
            return;

        ssdpMX = cg_upnp_ssdp_packet_getmx(ssdpPkt);
        cg_log_debug("Sleeping for a while... (MX:%d)\n", ssdpMX);
        cg_waitrandom((ssdpMX*1000)/4);
    }

    isRootDev = cg_upnp_device_isrootdevice(dev);

    if (cg_upnp_st_isalldevice(ssdpST) == TRUE) {
        /* for root device only */
        if (isRootDev == TRUE) {
            cg_upnp_device_getnotifydevicent(dev, ssdpMsg, sizeof(ssdpMsg));
            cg_upnp_device_getnotifydeviceusn(dev, deviceUSN, sizeof(deviceUSN));
            cg_upnp_device_postsearchresponse(dev, ssdpPkt, ssdpMsg, deviceUSN);
        }
        /* for all devices send */
        /* device type : device version */
        cg_upnp_device_getnotifydevicetypent(dev, ssdpMsg, sizeof(ssdpMsg));
        cg_upnp_device_getnotifydevicetypeusn(dev, deviceUSN, sizeof(deviceUSN));
        cg_upnp_device_postsearchresponse(dev, ssdpPkt, ssdpMsg, deviceUSN);
        /* device UUID */
        cg_upnp_device_postsearchresponse(dev, ssdpPkt, cg_upnp_device_getudn(dev), cg_upnp_device_getudn(dev));
    }
    else if (cg_upnp_st_isrootdevice(ssdpST)  == TRUE) {
        if (isRootDev == TRUE) {
            cg_upnp_device_getnotifydeviceusn(dev, deviceUSN, sizeof(deviceUSN));
            cg_upnp_device_postsearchresponse(dev, ssdpPkt, CG_UPNP_ST_ROOT_DEVICE, deviceUSN);
        }
    }
    else if (cg_upnp_st_isuuiddevice(ssdpST)  == TRUE) {
        devUDN = cg_upnp_device_getudn(dev);
        if (cg_streq(ssdpST, devUDN) == TRUE)
            cg_upnp_device_postsearchresponse(dev, ssdpPkt, devUDN, devUDN);
    }
    else if (cg_upnp_st_isurn(ssdpST)  == TRUE) {
        devType = cg_upnp_device_getdevicetype(dev);
        if (cg_streq(ssdpST, devType) == TRUE) {
            cg_upnp_device_getnotifydevicetypeusn(dev, deviceUSN, sizeof(deviceUSN));
            cg_upnp_device_postsearchresponse(dev, ssdpPkt, devType, deviceUSN);
        }
    }

    for (service=cg_upnp_device_getservices(dev); service != NULL; service = cg_upnp_service_next(service))
        cg_upnp_service_ssdpmessagereceived(service, ssdpPkt);

    for (childDev = cg_upnp_device_getdevices(dev); childDev != NULL; childDev = cg_upnp_device_next(childDev))
        cg_upnp_device_ssdpmessagereceived(childDev, ssdpPkt, FALSE);


    cg_log_debug_l4("Leaving...\n");
}
コード例 #12
0
ファイル: ccontent.c プロジェクト: Coramo/mupnp
static BOOL cg_upnpav_content_comparebytitle(CgUpnpAvContent* con, void* userData)
{
  if (!userData)
    return FALSE;
  return cg_streq(cg_upnpav_content_gettitle(con), (char*)userData);
}
コード例 #13
0
void ClinkTestCase::testURI()
{
	CgNetURI *uri;
	
    //////////////////////////////////////////////////
    
    uri = cg_net_uri_new();
	cg_net_uri_setvalue(uri, 
                        CLINK_TESTCASE_NET_URI_PROTOCOL "://"
                        CLINK_TESTCASE_NET_URI_HOST ":"
                        CLINK_TESTCASE_NET_URI_PORT
                        CLINK_TESTCASE_NET_URI_PATH);
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_getprotocol(uri), CLINK_TESTCASE_NET_URI_PROTOCOL));
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_gethost(uri), CLINK_TESTCASE_NET_URI_HOST));
	CPPUNIT_ASSERT(cg_net_uri_getport(uri) == atoi(CLINK_TESTCASE_NET_URI_PORT));
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_getpath(uri), CLINK_TESTCASE_NET_URI_PATH));
    
    //////////////////////////////////////////////////
    
    uri = cg_net_uri_new();
	cg_net_uri_setvalue(uri, 
                        CLINK_TESTCASE_NET_URI_PROTOCOL "://"
                        CLINK_TESTCASE_NET_URI_HOST
                        CLINK_TESTCASE_NET_URI_PATH);
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_getprotocol(uri), CLINK_TESTCASE_NET_URI_PROTOCOL));
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_gethost(uri), CLINK_TESTCASE_NET_URI_HOST));
	CPPUNIT_ASSERT(cg_net_uri_getport(uri) == CG_NET_URI_DEFAULT_HTTP_PORT);
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_getpath(uri), CLINK_TESTCASE_NET_URI_PATH));
    
    //////////////////////////////////////////////////
    
    uri = cg_net_uri_new();
	cg_net_uri_setvalue(uri, 
                        CLINK_TESTCASE_NET_URI_PROTOCOL_FTP "://"
                        CLINK_TESTCASE_NET_URI_HOST
                        CLINK_TESTCASE_NET_URI_PATH);
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_getprotocol(uri), CLINK_TESTCASE_NET_URI_PROTOCOL_FTP));
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_gethost(uri), CLINK_TESTCASE_NET_URI_HOST));
	CPPUNIT_ASSERT(cg_net_uri_getport(uri) == CG_NET_URI_DEFAULT_FTP_PORT);
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_getpath(uri), CLINK_TESTCASE_NET_URI_PATH));
	cg_net_uri_delete(uri);

    //////////////////////////////////////////////////
    
    uri = cg_net_uri_new();
	cg_net_uri_setvalue(uri, 
                        CLINK_TESTCASE_NET_URI_PROTOCOL "://"
                        CLINK_TESTCASE_NET_URI_HOST);
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_getprotocol(uri), CLINK_TESTCASE_NET_URI_PROTOCOL));
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_gethost(uri), CLINK_TESTCASE_NET_URI_HOST));
	CPPUNIT_ASSERT(!cg_net_uri_haspath(uri));
	cg_net_uri_delete(uri);

    //////////////////////////////////////////////////
    
    uri = cg_net_uri_new();
	cg_net_uri_setvalue(uri, 
                        CLINK_TESTCASE_NET_URI_PROTOCOL "://"
                        CLINK_TESTCASE_NET_URI_HOST "/");
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_getprotocol(uri), CLINK_TESTCASE_NET_URI_PROTOCOL));
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_gethost(uri), CLINK_TESTCASE_NET_URI_HOST));
	CPPUNIT_ASSERT(cg_streq(cg_net_uri_getpath(uri), "/"));
	cg_net_uri_delete(uri);
}