mirror of
				https://github.com/rofafor/vdr-plugin-iptv.git
				synced 2023-10-10 11:37:03 +00:00 
			
		
		
		
	Added missing CURL timeouts and improved section id scanner.
This commit is contained in:
		
							
								
								
									
										5
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								HISTORY
									
									
									
									
									
								
							@@ -212,3 +212,8 @@ VDR Plugin 'iptv' Revision History
 | 
			
		||||
- Fixed a nasty network byte order bug.
 | 
			
		||||
- Fixed and refactored the section filtering code.
 | 
			
		||||
- Fixed a possible crash in the file protocol.
 | 
			
		||||
 | 
			
		||||
2014-xx-xx: Versoin 2.0.1
 | 
			
		||||
 | 
			
		||||
- Added missing CURL timeouts.
 | 
			
		||||
- Improved section id scanner.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								README
									
									
									
									
									
								
							@@ -165,8 +165,7 @@ Notes:
 | 
			
		||||
  "disable_ca_updates" patch to the VDR in order to get rid of "Channel not
 | 
			
		||||
  available" messages.
 | 
			
		||||
 | 
			
		||||
- EIT scanning functionality can be disabled for all IPTV channels by applying
 | 
			
		||||
  the "disable_eitscan" patch to the VDR.
 | 
			
		||||
- EIT scanning functionality is disabled by default.
 | 
			
		||||
 | 
			
		||||
- Section id and pid scanners should be disabled after the correct data is
 | 
			
		||||
  found. This can be made via VDR's channel editor.
 | 
			
		||||
@@ -180,7 +179,12 @@ Notes:
 | 
			
		||||
  netrc configuration file for authentication:
 | 
			
		||||
  $(CONFDIR)/iptv/netrc
 | 
			
		||||
 | 
			
		||||
- CURL implementation
 | 
			
		||||
- You can quite easily figure out correct DVB triplet values by using the
 | 
			
		||||
  multicat and dvbsnoop tools:
 | 
			
		||||
  $ multicat -u -d 1620000000 @127.0.0.1:1234 /tmp/video.ts
 | 
			
		||||
  $ dvbsnoop -s ts -if /tmp/video.ts -tssubdecode -hexdumpbuffer 0x12 | \
 | 
			
		||||
    grep -m1 -A8 Service_ID | grep _ID
 | 
			
		||||
 | 
			
		||||
Acknowledgements:
 | 
			
		||||
 | 
			
		||||
- The IPTV section filtering code is derived from Linux kernel.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								common.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								common.h
									
									
									
									
									
								
							@@ -44,7 +44,8 @@
 | 
			
		||||
  do {                                                            \
 | 
			
		||||
     if (exp) {                                                   \
 | 
			
		||||
        char tmp[64];                                             \
 | 
			
		||||
        error(errstr": %s", strerror_r(errno, tmp, sizeof(tmp))); \
 | 
			
		||||
        error("[%s,%d]: "errstr": %s", __FILE__, __LINE__,        \
 | 
			
		||||
              strerror_r(errno, tmp, sizeof(tmp)));               \
 | 
			
		||||
        func;                                                     \
 | 
			
		||||
        ret;                                                      \
 | 
			
		||||
        }                                                         \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								iptv.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								iptv.c
									
									
									
									
									
								
							@@ -21,7 +21,7 @@
 | 
			
		||||
#define GITVERSION ""
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
       const char VERSION[]     = "2.0.0" GITVERSION;
 | 
			
		||||
       const char VERSION[]     = "2.0.1" GITVERSION;
 | 
			
		||||
static const char DESCRIPTION[] = trNOOP("Experience the IPTV");
 | 
			
		||||
 | 
			
		||||
class cPluginIptv : public cPlugin {
 | 
			
		||||
 
 | 
			
		||||
@@ -15,12 +15,12 @@
 | 
			
		||||
 | 
			
		||||
#define iptv_curl_easy_setopt(X, Y, Z) \
 | 
			
		||||
  if ((res = curl_easy_setopt((X), (Y), (Z))) != CURLE_OK) { \
 | 
			
		||||
     error("curl_easy_setopt(%s, %s, %s) failed: %d", #X, #Y, #Z, res); \
 | 
			
		||||
     error("curl_easy_setopt(%s, %s) failed: %s (%d)", #Y, #Z, curl_easy_strerror(res), res); \
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
#define iptv_curl_easy_perform(X) \
 | 
			
		||||
  if ((res = curl_easy_perform((X))) != CURLE_OK) { \
 | 
			
		||||
     error("curl_easy_perform(%s) failed: %d", #X, res); \
 | 
			
		||||
     error("curl_easy_perform() failed: %s (%d)", curl_easy_strerror(res), res); \
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
cIptvProtocolCurl::cIptvProtocolCurl()
 | 
			
		||||
@@ -264,7 +264,8 @@ bool cIptvProtocolCurl::Connect()
 | 
			
		||||
     iptv_curl_easy_setopt(handleM, CURLOPT_NETRC, (long)CURL_NETRC_OPTIONAL);
 | 
			
		||||
     iptv_curl_easy_setopt(handleM, CURLOPT_NETRC_FILE, *netrc);
 | 
			
		||||
 | 
			
		||||
     // Set timeout
 | 
			
		||||
     // Set timeouts
 | 
			
		||||
     iptv_curl_easy_setopt(handleM, CURLOPT_TIMEOUT, (long)eConnectTimeoutS);
 | 
			
		||||
     iptv_curl_easy_setopt(handleM, CURLOPT_CONNECTTIMEOUT, (long)eConnectTimeoutS);
 | 
			
		||||
 | 
			
		||||
     // Set user-agent
 | 
			
		||||
@@ -345,6 +346,10 @@ bool cIptvProtocolCurl::Connect()
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
       case eModeFile:
 | 
			
		||||
            // Set timeout
 | 
			
		||||
            iptv_curl_easy_setopt(handleM, CURLOPT_TIMEOUT_MS, 10L);
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
       case eModeUnknown:
 | 
			
		||||
       default:
 | 
			
		||||
            break;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								sidscanner.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								sidscanner.c
									
									
									
									
									
								
							@@ -71,17 +71,23 @@ void cSidScanner::Process(u_short pidP, u_char tidP, const u_char *dataP, int le
 | 
			
		||||
            if (ts.getTransportStreamId() != channelIdM.Tid()) {
 | 
			
		||||
               debug("cSidScanner::%s(): tsid=%d", __FUNCTION__, ts.getTransportStreamId());
 | 
			
		||||
               newTid = ts.getTransportStreamId();
 | 
			
		||||
               }
 | 
			
		||||
               tidFoundM = true;
 | 
			
		||||
               }
 | 
			
		||||
            if (ts.getOriginalNetworkId() != channelIdM.Nid()) {
 | 
			
		||||
               debug("cSidScanner::%s(): onid=%d", __FUNCTION__, ts.getOriginalNetworkId());
 | 
			
		||||
               newNid = ts.getOriginalNetworkId();
 | 
			
		||||
               nidFoundM = true;
 | 
			
		||||
               }
 | 
			
		||||
            break; // default to the first one
 | 
			
		||||
            }
 | 
			
		||||
        if (nit.getNetworkId() != channelIdM.Nid()) {
 | 
			
		||||
           debug("cSidScanner::%s(): nid=%d", __FUNCTION__, ts.getTransportStreamId());
 | 
			
		||||
        // fallback for network id if not found already
 | 
			
		||||
        if (!nidFoundM && (nit.getNetworkId() != channelIdM.Nid())) {
 | 
			
		||||
           debug("cSidScanner::%s(): nid=%d", __FUNCTION__, nit.getNetworkId());
 | 
			
		||||
           newNid = nit.getNetworkId();
 | 
			
		||||
           }
 | 
			
		||||
           nidFoundM = true;
 | 
			
		||||
           }
 | 
			
		||||
        }
 | 
			
		||||
     }
 | 
			
		||||
  if ((newSid >= 0) || (newNid >= 0) || (newTid >= 0)) {
 | 
			
		||||
     if (!Channels.Lock(true, 10))
 | 
			
		||||
        return;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user