Guest User

cmyth_livetv_chain_update with hack

a guest
Jan 2nd, 2013
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.48 KB | None | 0 0
  1. int
  2. cmyth_livetv_chain_update(cmyth_recorder_t rec, char * chainid)
  3. {
  4.     int ret, retry;
  5.     char url[1024];
  6.     cmyth_proginfo_t loc_prog;
  7.     cmyth_file_t ft = NULL;
  8.  
  9.     ret = 0;
  10.  
  11.     if (!rec) {
  12.         cmyth_dbg(CMYTH_DBG_ERROR, "%s: rec is NULL\n", __FUNCTION__);
  13.         return -1;
  14.     }
  15.  
  16.     /* JLB: Manage program break
  17.      * Skip chain update, it will doing later
  18.      */
  19.     if (!rec->rec_livetv_chain) {
  20.         cmyth_dbg(CMYTH_DBG_ERROR,
  21.               "%s: rec_livetv_chain is NULL\n",
  22.               __FUNCTION__, url);
  23.         return -1;
  24.     }
  25.     else {
  26.         if (rec->rec_livetv_chain->livetv_watch == 0) {
  27.             cmyth_dbg(CMYTH_DBG_DEBUG,
  28.                   "%s: the next program is awaited: skip chain update\n",
  29.                   __FUNCTION__);
  30.             return 0;
  31.         }
  32.     }
  33.  
  34.     cmyth_dbg(CMYTH_DBG_DEBUG, "%s: updating chain\n", __FUNCTION__);
  35.  
  36.     loc_prog = cmyth_recorder_get_cur_proginfo(rec);
  37.     if (!loc_prog) {
  38.         cmyth_dbg(CMYTH_DBG_ERROR, "%s: recorder is not recording\n", __FUNCTION__);
  39.         return -1;
  40.     }
  41.    
  42.     for (retry = 0; retry < 5; retry++) {
  43.         if (strncmp(rec->rec_livetv_chain->chainid, chainid, strlen(chainid)) == 0) {
  44.             sprintf(url, "myth://%s:%d%s", loc_prog->proginfo_hostname, rec->rec_port, loc_prog->proginfo_pathname);
  45.             if (cmyth_livetv_chain_has_url(rec, url) != -1) {
  46.                 ref_release(loc_prog);
  47.                 //cmyth_dbg(CMYTH_DBG_WARN, "%s: maybe wrong url %s, wait some 250ms before try again\n", __FUNCTION__, url+45); // KM
  48.                 //usleep(250000);
  49.                 loc_prog = cmyth_recorder_get_cur_proginfo(rec);
  50.                 if (!loc_prog) {
  51.                     cmyth_dbg(CMYTH_DBG_ERROR, "%s: recorder is not recording\n", __FUNCTION__);
  52.                     return -1;
  53.                 }
  54.             }
  55.             else {
  56.                 cmyth_dbg(CMYTH_DBG_WARN, "%s: %d retrys needed before getting correct url %s\n", __FUNCTION__, retry, url+45); // KM
  57.                 break;
  58.             }
  59.         }
  60.         else {
  61.             break;
  62.         }
  63.     }
  64.    
  65.     if (strncmp(rec->rec_livetv_chain->chainid, chainid, strlen(chainid)) == 0) {
  66.         sprintf(url, "myth://%s:%d%s", loc_prog->proginfo_hostname, rec->rec_port,
  67.                 loc_prog->proginfo_pathname);
  68.  
  69.         /*
  70.               Now check if this file is in the recorder chain and if not
  71.               then open a new file transfer and add it to the chain.
  72.         */
  73.  
  74.         if (cmyth_livetv_chain_has_url(rec, url) == -1) {
  75.             ft = cmyth_conn_connect_file(loc_prog, rec->rec_conn, 4096, rec->rec_livetv_chain->livetv_tcp_rcvbuf);
  76.             if (!ft) {
  77.                 cmyth_dbg(CMYTH_DBG_ERROR,
  78.                       "%s: cmyth_conn_connect_file(%s) failed\n",
  79.                       __FUNCTION__, url);
  80.                 ret = -1;
  81.                 goto out;
  82.             }
  83.             /*
  84.              * file in the chain could be dummy and then
  85.              * backend close file transfer socket immediately.
  86.              * In other cases add the chain else wait next chain update to
  87.              * add a valid program.
  88.              */
  89.             if (cmyth_file_is_open(ft) > 0) {
  90.                 if(cmyth_livetv_chain_add(rec, url, ft, loc_prog) == -1) {
  91.                     cmyth_dbg(CMYTH_DBG_ERROR,
  92.                           "%s: cmyth_livetv_chain_add(%s) failed\n",
  93.                           __FUNCTION__, url);
  94.                     ret = -1;
  95.                     goto out;
  96.                 }
  97.                 if (rec->rec_livetv_chain->chain_switch_on_create) {
  98.                     cmyth_livetv_chain_switch(rec, LAST);
  99.                     rec->rec_livetv_chain->chain_switch_on_create = 0;
  100.                 }
  101.             }
  102.             else {
  103.                 cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_file_is_open() fails, %s not added\n", __FUNCTION__, url+45); // KM
  104.                 ret = -1;
  105.             }
  106.         }
  107.         else {
  108.             cmyth_dbg(CMYTH_DBG_DEBUG, "%s: %s is already in the chain\n", __FUNCTION__, url+45); // KM
  109.         }
  110.  
  111.     }
  112.     else {
  113.         cmyth_dbg(CMYTH_DBG_ERROR,
  114.                   "%s: chainid doesn't match recorder's chainid!!\n",
  115.                   __FUNCTION__, url);
  116.         ret = -1;
  117.     }
  118.  
  119. out:
  120.     ref_release(ft);
  121.     ref_release(loc_prog);
  122.  
  123.     return ret;
  124. }
Add Comment
Please, Sign In to add comment