Guest User

Untitled

a guest
Mar 2nd, 2012
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 2.38 KB | None | 0 0
  1. --- rtmp.c  2012-03-02 19:49:44.000000000 -0800
  2. +++ rtmp_new.c  2012-03-02 20:17:57.000000000 -0800
  3. @@ -442,9 +442,9 @@
  4.      }
  5.  }
  6.  
  7. -enum { OPT_STR=0, OPT_INT, OPT_BOOL, OPT_CONN };
  8. +enum { OPT_STR=0, OPT_INT, OPT_BOOL, OPT_CONN, OPT_HASH };
  9.  static const char *optinfo[] = {
  10. -   "string", "integer", "boolean", "AMF" };
  11. +   "string", "integer", "boolean", "AMF", "string" };
  12.  
  13.  #define OFF(x) offsetof(struct RTMP,x)
  14.  
  15. @@ -483,6 +483,10 @@
  16.     "Perform SWF Verification" },
  17.    { AVC("swfAge"),    OFF(Link.swfAge),        OPT_INT, 0,
  18.     "Number of days to use cached SWF hash" },
  19. +  { AVC("swfHash"),    OFF(Link.SWFHash),      OPT_HASH, 0,
  20. +   "Hash of the SWF file" },
  21. +  { AVC("swfSize"),    OFF(Link.SWFSize),      OPT_INT, 0,
  22. +   "Size in bytes of the SWF file" },
  23.    { AVC("start"),     OFF(Link.seekTime),      OPT_INT, 0,
  24.     "Stream start position in milliseconds" },
  25.    { AVC("stop"),      OFF(Link.stopTime),      OPT_INT, 0,
  26. @@ -606,6 +610,25 @@
  27.    return 0;
  28.  }
  29.  
  30. +#define HEX2BIN(a)      (((a)&0x40)?((a)&0xf)+9:((a)&0xf))
  31. +int hex2bin(char *str, char **hex)
  32. +{
  33. +  char *ptr;
  34. +  int i, l = strlen(str);
  35. +
  36. +  if (l & 1)
  37. +   return 0;
  38. +
  39. +  *hex = malloc(l/2);
  40. +  ptr = *hex;
  41. +  if (!ptr)
  42. +    return 0;
  43. +
  44. +  for (i=0; i<l; i+=2)
  45. +    *ptr++ = (HEX2BIN(str[i]) << 4) | HEX2BIN(str[i+1]);
  46. +  return l/2;
  47. +}
  48. +
  49.  int RTMP_SetOpt(RTMP *r, const AVal *opt, AVal *arg)
  50.  {
  51.    int i;
  52. @@ -638,7 +661,11 @@
  53.        if (parseAMF(&r->Link.extras, arg, &r->Link.edepth))
  54.          return FALSE;
  55.        break;
  56. -    }
  57. +    case OPT_HASH:
  58. +      if (!hex2bin(arg.av_val, &r->Link.SWFHash.av_val));
  59. +        return FALSE;
  60. +      break;
  61. +   }
  62.      break;
  63.    }
  64.    if (!options[i].name.av_len) {
  65. @@ -743,9 +770,10 @@
  66.      }
  67.  
  68.  #ifdef CRYPTO
  69. -  if ((r->Link.lFlags & RTMP_LF_SWFV) && r->Link.swfUrl.av_len)
  70. -    RTMP_HashSWF(r->Link.swfUrl.av_val, &r->Link.SWFSize,
  71. -     (unsigned char *)r->Link.SWFHash, r->Link.swfAge);
  72. +  if (!r->Link.SWFHash || r->Link.SWFSize == 0)
  73. +    if ((r->Link.lFlags & RTMP_LF_SWFV) && r->Link.swfUrl.av_len)
  74. +      RTMP_HashSWF(r->Link.swfUrl.av_val, &r->Link.SWFSize,
  75. +     (unsigned char *)r->Link.SWFHash, r->Link.swfAge);
  76.  #endif
  77.  
  78.    if (r->Link.port == 0)
  79. @@ -3587,8 +3615,6 @@
  80.    return closesocket(sb->sb_socket);
  81.  }
  82.  
  83. -#define HEX2BIN(a) (((a)&0x40)?((a)&0xf)+9:((a)&0xf))
  84. -
  85.  static void
  86.  DecodeTEA(AVal *key, AVal *text)
  87.  {
Advertisement
Add Comment
Please, Sign In to add comment