Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- rtmp.c 2012-03-02 19:49:44.000000000 -0800
- +++ rtmp_new.c 2012-03-02 20:17:57.000000000 -0800
- @@ -442,9 +442,9 @@
- }
- }
- -enum { OPT_STR=0, OPT_INT, OPT_BOOL, OPT_CONN };
- +enum { OPT_STR=0, OPT_INT, OPT_BOOL, OPT_CONN, OPT_HASH };
- static const char *optinfo[] = {
- - "string", "integer", "boolean", "AMF" };
- + "string", "integer", "boolean", "AMF", "string" };
- #define OFF(x) offsetof(struct RTMP,x)
- @@ -483,6 +483,10 @@
- "Perform SWF Verification" },
- { AVC("swfAge"), OFF(Link.swfAge), OPT_INT, 0,
- "Number of days to use cached SWF hash" },
- + { AVC("swfHash"), OFF(Link.SWFHash), OPT_HASH, 0,
- + "Hash of the SWF file" },
- + { AVC("swfSize"), OFF(Link.SWFSize), OPT_INT, 0,
- + "Size in bytes of the SWF file" },
- { AVC("start"), OFF(Link.seekTime), OPT_INT, 0,
- "Stream start position in milliseconds" },
- { AVC("stop"), OFF(Link.stopTime), OPT_INT, 0,
- @@ -606,6 +610,25 @@
- return 0;
- }
- +#define HEX2BIN(a) (((a)&0x40)?((a)&0xf)+9:((a)&0xf))
- +int hex2bin(char *str, char **hex)
- +{
- + char *ptr;
- + int i, l = strlen(str);
- +
- + if (l & 1)
- + return 0;
- +
- + *hex = malloc(l/2);
- + ptr = *hex;
- + if (!ptr)
- + return 0;
- +
- + for (i=0; i<l; i+=2)
- + *ptr++ = (HEX2BIN(str[i]) << 4) | HEX2BIN(str[i+1]);
- + return l/2;
- +}
- +
- int RTMP_SetOpt(RTMP *r, const AVal *opt, AVal *arg)
- {
- int i;
- @@ -638,7 +661,11 @@
- if (parseAMF(&r->Link.extras, arg, &r->Link.edepth))
- return FALSE;
- break;
- - }
- + case OPT_HASH:
- + if (!hex2bin(arg.av_val, &r->Link.SWFHash.av_val));
- + return FALSE;
- + break;
- + }
- break;
- }
- if (!options[i].name.av_len) {
- @@ -743,9 +770,10 @@
- }
- #ifdef CRYPTO
- - if ((r->Link.lFlags & RTMP_LF_SWFV) && r->Link.swfUrl.av_len)
- - RTMP_HashSWF(r->Link.swfUrl.av_val, &r->Link.SWFSize,
- - (unsigned char *)r->Link.SWFHash, r->Link.swfAge);
- + if (!r->Link.SWFHash || r->Link.SWFSize == 0)
- + if ((r->Link.lFlags & RTMP_LF_SWFV) && r->Link.swfUrl.av_len)
- + RTMP_HashSWF(r->Link.swfUrl.av_val, &r->Link.SWFSize,
- + (unsigned char *)r->Link.SWFHash, r->Link.swfAge);
- #endif
- if (r->Link.port == 0)
- @@ -3587,8 +3615,6 @@
- return closesocket(sb->sb_socket);
- }
- -#define HEX2BIN(a) (((a)&0x40)?((a)&0xf)+9:((a)&0xf))
- -
- static void
- DecodeTEA(AVal *key, AVal *text)
- {
Advertisement
Add Comment
Please, Sign In to add comment