void mupnp_controlpoint_adddevicebyssdppacket(mUpnpControlPoint* ctrlPoint, mUpnpSSDPPacket* ssdpPkt) { mUpnpDevice* dev = NULL; const char* usn = NULL; char udn[MUPNP_UDN_LEN_MAX]; MUPNP_DEVICE_LISTENER listener = NULL; mUpnpDeviceStatus status = 0; mupnp_log_debug_l4("Entering...\n"); listener = mupnp_controlpoint_getdevicelistener(ctrlPoint); usn = mupnp_ssdp_packet_getusn(ssdpPkt); mupnp_usn_getudn(usn, udn, sizeof(udn)); mupnp_controlpoint_lock(ctrlPoint); dev = mupnp_controlpoint_getdevicebyudn(ctrlPoint, udn); if (dev != NULL) { /* Device was found from local cache */ if (mupnp_device_updatefromssdppacket(dev, ssdpPkt) == true) { mupnp_mutex_lock(ctrlPoint->expMutex); mupnp_cond_signal(ctrlPoint->expCond); mupnp_mutex_unlock(ctrlPoint->expMutex); /* Device was successfully updated */ status = mUpnpDeviceStatusUpdated; } else { /* Problems occurred in device update */ status = mUpnpDeviceStatusInvalid; } } else { /* This is a new device */ dev = mupnp_controlpoint_createdevicefromssdkpacket(ssdpPkt); if (dev == NULL) { /* Problems occurred in device creation */ status = mUpnpDeviceStatusInvalid; } else { mupnp_controlpoint_adddevice(ctrlPoint, dev); /* Device added, wake up expirationhandler thread */ mupnp_mutex_lock(ctrlPoint->expMutex); mupnp_cond_signal(ctrlPoint->expCond); mupnp_mutex_unlock(ctrlPoint->expMutex); status = mUpnpDeviceStatusAdded; } } mupnp_controlpoint_unlock(ctrlPoint); if (listener != NULL) { listener(ctrlPoint, udn, status); } mupnp_log_debug_l4("Leaving...\n"); }
void mupnp_controlpoint_removedevicebyssdppacket(mUpnpControlPoint *ctrlPoint, mUpnpSSDPPacket *ssdpPkt) { const char *usn; char udn[MUPNP_UDN_LEN_MAX]; mUpnpDevice *dev; MUPNP_DEVICE_LISTENER listener = mupnp_controlpoint_getdevicelistener(ctrlPoint); mupnp_log_debug_l4("Entering...\n"); usn = mupnp_ssdp_packet_getusn(ssdpPkt); mupnp_usn_getudn(usn, udn, sizeof(udn)); mupnp_controlpoint_lock(ctrlPoint); dev = mupnp_controlpoint_getdevicebyudn(ctrlPoint, udn); if (dev == NULL) { mupnp_controlpoint_unlock(ctrlPoint); return; } if (listener != NULL) { mupnp_controlpoint_unlock(ctrlPoint); listener(ctrlPoint, udn, mUpnpDeviceStatusRemoved); mupnp_controlpoint_lock(ctrlPoint); } mupnp_device_delete(dev); mupnp_controlpoint_unlock(ctrlPoint); mupnp_log_debug_l4("Leaving...\n"); }
void SSDPNotifyListner(mUpnpSSDPPacket *ssdpPkt) { if (mupnp_ssdp_packet_isdiscover(ssdpPkt) == true) { printf("ssdp:discover : ST = %s\n", mupnp_ssdp_packet_getst(ssdpPkt)); } else if (mupnp_ssdp_packet_isalive(ssdpPkt) == true) { printf("ssdp:alive : uuid = %s, NT = %s, location = %s\n", mupnp_ssdp_packet_getusn(ssdpPkt), mupnp_ssdp_packet_getnt(ssdpPkt), mupnp_ssdp_packet_getlocation(ssdpPkt)); } else if (mupnp_ssdp_packet_isbyebye(ssdpPkt) == true) { printf("ssdp:byebye : uuid = %s, NT = %s\n", mupnp_ssdp_packet_getusn(ssdpPkt), mupnp_ssdp_packet_getnt(ssdpPkt)); } mupnp_ssdp_packet_print(ssdpPkt); }
bool mupnp_ssdp_packet_isrootdevice(mUpnpSSDPPacket *ssdpPkt) { mupnp_log_debug_l4("Entering...\n"); if (mupnp_nt_isrootdevice(mupnp_ssdp_packet_getnt(ssdpPkt)) == true) return true; if (mupnp_st_isrootdevice(mupnp_ssdp_packet_getst(ssdpPkt)) == true) return true; return mupnp_usn_isrootdevice(mupnp_ssdp_packet_getusn(ssdpPkt)); mupnp_log_debug_l4("Leaving...\n"); }