summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchriszero <zerov83@gmail.com>2014-11-22 21:28:31 +0100
committerchriszero <zerov83@gmail.com>2014-11-22 21:28:31 +0100
commit90f4be4ba9500df310af39b5274d3a6da69cd90f (patch)
tree9c69d8cf546c5f7db6d2380727459fc299f42ea3
parent186c1b7b8500ad6da231b91d4367607c0707dc39 (diff)
downloadvdr-plugin-plex-90f4be4ba9500df310af39b5274d3a6da69cd90f.tar.gz
vdr-plugin-plex-90f4be4ba9500df310af39b5274d3a6da69cd90f.tar.bz2
again, discover local servers
-rw-r--r--plexgdm.cpp41
1 files changed, 28 insertions, 13 deletions
diff --git a/plexgdm.cpp b/plexgdm.cpp
index a903903..cb42be3 100644
--- a/plexgdm.cpp
+++ b/plexgdm.cpp
@@ -53,8 +53,10 @@ void plexgdm::Action()
m_registrationIsRunning = true;
cMutexLock lock(&m_mutex);
+try {
Poco::Net::MulticastSocket update_sock(
- Poco::Net::SocketAddress( Poco::Net::IPAddress(), m_discoverAdress.port() )
+ Poco::Net::SocketAddress( Poco::Net::IPAddress(), m_discoverAdress.port() ),
+ true
);
update_sock.setLoopback(true);
@@ -96,6 +98,11 @@ void plexgdm::Action()
update_sock.sendTo(s.c_str(), s.length(), m_clientRegisterGroup,0);
m_clientRegistered = false;
+}
+ catch(Poco::Exception &exc){
+ esyslog("[plex]Exception in %s s%", __func__, exc.displayText().c_str() );
+ std::cout << "[plex]Exception: in " << __func__ << " | " << exc.displayText() << std::endl;
+ }
}
@@ -104,29 +111,37 @@ void plexgdm::discover()
try {
// TODO: Discover multiple servers
char buffer[1024];
+
Poco::Net::MulticastSocket socket(
- Poco::Net::SocketAddress( Poco::Net::IPAddress(), m_discoverAdress.port() )
+ Poco::Net::SocketAddress( Poco::Net::IPAddress(), m_discoverAdress.port() ),
+ true
);
socket.setLoopback(true);
+ socket.setTimeToLive(1);
socket.setReceiveTimeout(0.6);
- //socket.setTimeToLive(0.6);
socket.sendTo(_discoverMessage.c_str(), _discoverMessage.length(), m_discoverAdress, 0);
socket.joinGroup(m_discoverAdress.host());
- Poco::Net::SocketAddress sender;
- int n = socket.receiveFrom(buffer, sizeof(buffer), sender);
- std::string buf(buffer, n);
- //std::cout << "Discover received from: " << sender.host().toString() << "\nData:\n" << buf;
-
- socket.close();
- m_discoveryComplete = true;
- // check for a valid response
- if(buf.find("200 OK") != std::string::npos) {
- m_pServer = new PlexServer(buf, sender.host().toString());
+ while(true) {
+ Poco::Net::SocketAddress sender;
+ int n = socket.receiveFrom(buffer, sizeof(buffer), sender);
+ std::string buf(buffer, n);
+ std::cout << "Discover received from: " << sender.host().toString() << "\nData:\n" << buf << std::endl;
+
+ // check for a valid response
+ if(buf.find("200 OK") != std::string::npos) {
+ m_pServer = new PlexServer(buf, sender.host().toString());
+ std::cout << "New Plexserver: " << m_pServer->GetServerName() << " Adress: " << m_pServer->GetIpAdress() << ":" << m_pServer->GetPort() << std::endl;
+ socket.close();
+ m_discoveryComplete = true;
+ break;
+ }
}
+
}
catch(Poco::Exception &exc){
esyslog("[plex]Exception in %s s%", __func__, exc.displayText().c_str() );
+ std::cout << "[plex]Exception: in " << __func__ << " | " << exc.displayText() << std::endl;
}
}