winlin

for bug #235, fix bug of utest.

@@ -464,8 +464,14 @@ namespace _srs_internal @@ -464,8 +464,14 @@ namespace _srs_internal
464 return digest.digest; 464 return digest.digest;
465 } 465 }
466 466
  467 + char* c1s1_strategy::get_key()
  468 + {
  469 + return key.key;
  470 + }
  471 +
467 int c1s1_strategy::dump(c1s1* owner, char* _c1s1, int size) 472 int c1s1_strategy::dump(c1s1* owner, char* _c1s1, int size)
468 { 473 {
  474 + srs_assert(size == 1536);
469 return copy_to(owner, _c1s1, size, true); 475 return copy_to(owner, _c1s1, size, true);
470 } 476 }
471 477
@@ -731,6 +737,12 @@ namespace _srs_internal @@ -731,6 +737,12 @@ namespace _srs_internal
731 { 737 {
732 int ret = ERROR_SUCCESS; 738 int ret = ERROR_SUCCESS;
733 739
  740 + if (with_digest) {
  741 + srs_assert(size == 1536);
  742 + } else {
  743 + srs_assert(size == 1504);
  744 + }
  745 +
734 SrsStream stream; 746 SrsStream stream;
735 747
736 if ((ret = stream.initialize(bytes, size)) != ERROR_SUCCESS) { 748 if ((ret = stream.initialize(bytes, size)) != ERROR_SUCCESS) {
@@ -794,6 +806,12 @@ namespace _srs_internal @@ -794,6 +806,12 @@ namespace _srs_internal
794 { 806 {
795 int ret = ERROR_SUCCESS; 807 int ret = ERROR_SUCCESS;
796 808
  809 + if (with_digest) {
  810 + srs_assert(size == 1536);
  811 + } else {
  812 + srs_assert(size == 1504);
  813 + }
  814 +
797 SrsStream stream; 815 SrsStream stream;
798 816
799 if ((ret = stream.initialize(bytes, size)) != ERROR_SUCCESS) { 817 if ((ret = stream.initialize(bytes, size)) != ERROR_SUCCESS) {
@@ -846,8 +864,15 @@ namespace _srs_internal @@ -846,8 +864,15 @@ namespace _srs_internal
846 return payload->get_digest(); 864 return payload->get_digest();
847 } 865 }
848 866
  867 + char* c1s1::get_key()
  868 + {
  869 + srs_assert(payload != NULL);
  870 + return payload->get_key();
  871 + }
  872 +
849 int c1s1::dump(char* _c1s1, int size) 873 int c1s1::dump(char* _c1s1, int size)
850 { 874 {
  875 + srs_assert(size == 1536);
851 srs_assert(payload != NULL); 876 srs_assert(payload != NULL);
852 return payload->dump(this, _c1s1, size); 877 return payload->dump(this, _c1s1, size);
853 } 878 }
@@ -205,11 +205,16 @@ namespace _srs_internal @@ -205,11 +205,16 @@ namespace _srs_internal
205 */ 205 */
206 virtual srs_schema_type schema() = 0; 206 virtual srs_schema_type schema() = 0;
207 /** 207 /**
208 - * get the digest key. 208 + * get the digest.
209 */ 209 */
210 virtual char* get_digest(); 210 virtual char* get_digest();
211 /** 211 /**
  212 + * get the key.
  213 + */
  214 + virtual char* get_key();
  215 + /**
212 * copy to bytes. 216 * copy to bytes.
  217 + * @param size must be 1536.
213 */ 218 */
214 virtual int dump(c1s1* owner, char* _c1s1, int size); 219 virtual int dump(c1s1* owner, char* _c1s1, int size);
215 /** 220 /**
@@ -246,15 +251,31 @@ namespace _srs_internal @@ -246,15 +251,31 @@ namespace _srs_internal
246 * server: validate the parsed s1 schema 251 * server: validate the parsed s1 schema
247 */ 252 */
248 virtual int s1_validate_digest(c1s1* owner, bool& is_valid); 253 virtual int s1_validate_digest(c1s1* owner, bool& is_valid);
249 - protected: 254 + public:
  255 + /**
  256 + * calc the digest for c1
  257 + */
250 virtual int calc_c1_digest(c1s1* owner, char*& c1_digest); 258 virtual int calc_c1_digest(c1s1* owner, char*& c1_digest);
  259 + /**
  260 + * calc the digest for s1
  261 + */
251 virtual int calc_s1_digest(c1s1* owner, char*& s1_digest); 262 virtual int calc_s1_digest(c1s1* owner, char*& s1_digest);
252 /** 263 /**
253 * copy whole c1s1 to bytes. 264 * copy whole c1s1 to bytes.
  265 + * @param size must always be 1536 with digest, and 1504 without digest.
254 */ 266 */
255 virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest) = 0; 267 virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest) = 0;
  268 + /**
  269 + * copy time and version to stream.
  270 + */
256 virtual void copy_time_version(SrsStream* stream, c1s1* owner); 271 virtual void copy_time_version(SrsStream* stream, c1s1* owner);
  272 + /**
  273 + * copy key to stream.
  274 + */
257 virtual void copy_key(SrsStream* stream); 275 virtual void copy_key(SrsStream* stream);
  276 + /**
  277 + * copy digest to stream.
  278 + */
258 virtual void copy_digest(SrsStream* stream, bool with_digest); 279 virtual void copy_digest(SrsStream* stream, bool with_digest);
259 }; 280 };
260 281
@@ -271,7 +292,7 @@ namespace _srs_internal @@ -271,7 +292,7 @@ namespace _srs_internal
271 public: 292 public:
272 virtual srs_schema_type schema(); 293 virtual srs_schema_type schema();
273 virtual int parse(char* _c1s1, int size); 294 virtual int parse(char* _c1s1, int size);
274 - private: 295 + public:
275 virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest); 296 virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest);
276 }; 297 };
277 298
@@ -288,7 +309,7 @@ namespace _srs_internal @@ -288,7 +309,7 @@ namespace _srs_internal
288 public: 309 public:
289 virtual srs_schema_type schema(); 310 virtual srs_schema_type schema();
290 virtual int parse(char* _c1s1, int size); 311 virtual int parse(char* _c1s1, int size);
291 - private: 312 + public:
292 virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest); 313 virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest);
293 }; 314 };
294 315
@@ -326,13 +347,19 @@ namespace _srs_internal @@ -326,13 +347,19 @@ namespace _srs_internal
326 * get the digest key. 347 * get the digest key.
327 */ 348 */
328 virtual char* get_digest(); 349 virtual char* get_digest();
  350 + /**
  351 + * get the key.
  352 + */
  353 + virtual char* get_key();
329 public: 354 public:
330 /** 355 /**
331 * copy to bytes. 356 * copy to bytes.
  357 + * @param size, must always be 1536.
332 */ 358 */
333 virtual int dump(char* _c1s1, int size); 359 virtual int dump(char* _c1s1, int size);
334 /** 360 /**
335 * server: parse the c1s1, discovery the key and digest by schema. 361 * server: parse the c1s1, discovery the key and digest by schema.
  362 + * @param size, must always be 1536.
336 * use the c1_validate_digest() to valid the digest of c1. 363 * use the c1_validate_digest() to valid the digest of c1.
337 * use the s1_validate_digest() to valid the digest of s1. 364 * use the s1_validate_digest() to valid the digest of s1.
338 */ 365 */
@@ -409,10 +436,12 @@ namespace _srs_internal @@ -409,10 +436,12 @@ namespace _srs_internal
409 public: 436 public:
410 /** 437 /**
411 * copy to bytes. 438 * copy to bytes.
  439 + * @param size, must always be 1536.
412 */ 440 */
413 virtual int dump(char* _c2s2, int size); 441 virtual int dump(char* _c2s2, int size);
414 /** 442 /**
415 * parse the c2s2 443 * parse the c2s2
  444 + * @param size, must always be 1536.
416 */ 445 */
417 virtual int parse(char* _c2s2, int size); 446 virtual int parse(char* _c2s2, int size);
418 public: 447 public:
@@ -285,14 +285,15 @@ VOID TEST(ProtocolHandshakeTest, VerifyFPC0C1) @@ -285,14 +285,15 @@ VOID TEST(ProtocolHandshakeTest, VerifyFPC0C1)
285 c1s1 c1; 285 c1s1 c1;
286 286
287 // the schema of data must be schema0: key-digest. 287 // the schema of data must be schema0: key-digest.
288 - ASSERT_EQ(ERROR_SUCCESS, c1.parse(c0c1 + 1, srs_schema0)); 288 + ASSERT_EQ(ERROR_SUCCESS, c1.parse(c0c1 + 1, 1536, srs_schema0));
289 EXPECT_EQ((int32_t)0x000f64d0, c1.time); 289 EXPECT_EQ((int32_t)0x000f64d0, c1.time);
290 EXPECT_EQ((int32_t)0x80000702, c1.version); 290 EXPECT_EQ((int32_t)0x80000702, c1.version);
291 291
292 // manually validate the c1 292 // manually validate the c1
293 // @see: calc_c1_digest 293 // @see: calc_c1_digest
294 - char* c1s1_joined_bytes = srs_bytes_join_schema0(c1.time, c1.version, &c1.block0.key, &c1.block1.digest); 294 + char* c1s1_joined_bytes = new char[1536 -32];
295 SrsAutoFree(char, c1s1_joined_bytes); 295 SrsAutoFree(char, c1s1_joined_bytes);
  296 + ASSERT_EQ(ERROR_SUCCESS, c1.payload->copy_to(&c1, c1s1_joined_bytes, 1536 - 32, false));
296 297
297 bool is_valid; 298 bool is_valid;
298 ASSERT_EQ(ERROR_SUCCESS, c1.c1_validate_digest(is_valid)); 299 ASSERT_EQ(ERROR_SUCCESS, c1.c1_validate_digest(is_valid));
@@ -304,14 +305,14 @@ VOID TEST(ProtocolHandshakeTest, VerifyFPC0C1) @@ -304,14 +305,14 @@ VOID TEST(ProtocolHandshakeTest, VerifyFPC0C1)
304 (char)0xf4, (char)0x21, (char)0xa8, (char)0x65, (char)0xce, (char)0xf8, (char)0x8e, (char)0xcc, (char)0x16, (char)0x1e, (char)0xbb, (char)0xd8, (char)0x0e, (char)0xcb, (char)0xd2, (char)0x48, (char)0x37, (char)0xaf, (char)0x4e, (char)0x67, (char)0x45, (char)0xf1, (char)0x79, (char)0x69, (char)0xd2, (char)0xee, (char)0xa4, (char)0xb5, (char)0x01, (char)0xbf, (char)0x57, (char)0x0f, (char)0x68, (char)0x37, (char)0xbe, (char)0x4e, (char)0xff, (char)0xc9, (char)0xb9, (char)0x92, (char)0x23, (char)0x06, (char)0x75, (char)0xa0, (char)0x42, (char)0xe4, (char)0x0a, (char)0x30, 305 (char)0xf4, (char)0x21, (char)0xa8, (char)0x65, (char)0xce, (char)0xf8, (char)0x8e, (char)0xcc, (char)0x16, (char)0x1e, (char)0xbb, (char)0xd8, (char)0x0e, (char)0xcb, (char)0xd2, (char)0x48, (char)0x37, (char)0xaf, (char)0x4e, (char)0x67, (char)0x45, (char)0xf1, (char)0x79, (char)0x69, (char)0xd2, (char)0xee, (char)0xa4, (char)0xb5, (char)0x01, (char)0xbf, (char)0x57, (char)0x0f, (char)0x68, (char)0x37, (char)0xbe, (char)0x4e, (char)0xff, (char)0xc9, (char)0xb9, (char)0x92, (char)0x23, (char)0x06, (char)0x75, (char)0xa0, (char)0x42, (char)0xe4, (char)0x0a, (char)0x30,
305 (char)0xf0, (char)0xaf, (char)0xb0, (char)0x54, (char)0x88, (char)0x7c, (char)0xc0, (char)0xc1, (char)0x0c, (char)0x6d, (char)0x01, (char)0x36, (char)0x63, (char)0xf3, (char)0x3d, (char)0xbc, (char)0x72, (char)0xf6, (char)0x96, (char)0xc8, (char)0x87, (char)0xab, (char)0x8b, (char)0x0c, (char)0x91, (char)0x2f, (char)0x42, (char)0x2a, (char)0x11, (char)0xf6, (char)0x2d, (char)0x5e 306 (char)0xf0, (char)0xaf, (char)0xb0, (char)0x54, (char)0x88, (char)0x7c, (char)0xc0, (char)0xc1, (char)0x0c, (char)0x6d, (char)0x01, (char)0x36, (char)0x63, (char)0xf3, (char)0x3d, (char)0xbc, (char)0x72, (char)0xf6, (char)0x96, (char)0xc8, (char)0x87, (char)0xab, (char)0x8b, (char)0x0c, (char)0x91, (char)0x2f, (char)0x42, (char)0x2a, (char)0x11, (char)0xf6, (char)0x2d, (char)0x5e
306 }; 307 };
307 - EXPECT_TRUE(srs_bytes_equals(c1.block0.key.key, key, 128)); 308 + EXPECT_TRUE(srs_bytes_equals(c1.get_key(), key, 128));
308 309
309 // 32bytes digest 310 // 32bytes digest
310 char digest[] = { 311 char digest[] = {
311 (char)0x6c, (char)0x96, (char)0x9f, (char)0x26, (char)0xeb, (char)0xdc, (char)0x61, (char)0xc4, (char)0x8f, (char)0xd3, (char)0x2b, (char)0x81, (char)0x86, (char)0x6c, (char)0x9c, (char)0xc2, 312 (char)0x6c, (char)0x96, (char)0x9f, (char)0x26, (char)0xeb, (char)0xdc, (char)0x61, (char)0xc4, (char)0x8f, (char)0xd3, (char)0x2b, (char)0x81, (char)0x86, (char)0x6c, (char)0x9c, (char)0xc2,
312 (char)0xb1, (char)0xb5, (char)0xbc, (char)0xa6, (char)0xd6, (char)0xd6, (char)0x1d, (char)0xce, (char)0x93, (char)0x78, (char)0xb3, (char)0xec, (char)0xa8, (char)0x64, (char)0x19, (char)0x13 313 (char)0xb1, (char)0xb5, (char)0xbc, (char)0xa6, (char)0xd6, (char)0xd6, (char)0x1d, (char)0xce, (char)0x93, (char)0x78, (char)0xb3, (char)0xec, (char)0xa8, (char)0x64, (char)0x19, (char)0x13
313 }; 314 };
314 - EXPECT_TRUE(srs_bytes_equals(c1.block1.digest.digest, digest, 32)); 315 + EXPECT_TRUE(srs_bytes_equals(c1.get_digest(), digest, 32));
315 } 316 }
316 317
317 VOID TEST(ProtocolHandshakeTest, ComplexHandshake) 318 VOID TEST(ProtocolHandshakeTest, ComplexHandshake)
@@ -348,22 +349,22 @@ VOID TEST(ProtocolHandshakeTest, ComplexHandshake) @@ -348,22 +349,22 @@ VOID TEST(ProtocolHandshakeTest, ComplexHandshake)
348 bool is_valid; 349 bool is_valid;
349 350
350 c1s1 c1; 351 c1s1 c1;
351 - ASSERT_EQ(ERROR_SUCCESS, c1.parse(hs_bytes->c0c1 + 1, srs_schema0)); 352 + ASSERT_EQ(ERROR_SUCCESS, c1.parse(hs_bytes->c0c1 + 1, 1536, srs_schema0));
352 ASSERT_EQ(ERROR_SUCCESS, c1.c1_validate_digest(is_valid)); 353 ASSERT_EQ(ERROR_SUCCESS, c1.c1_validate_digest(is_valid));
353 ASSERT_TRUE(is_valid); 354 ASSERT_TRUE(is_valid);
354 355
355 c1s1 s1; 356 c1s1 s1;
356 - ASSERT_EQ(ERROR_SUCCESS, s1.parse(hs_bytes->s0s1s2 + 1, c1.schema)); 357 + ASSERT_EQ(ERROR_SUCCESS, s1.parse(hs_bytes->s0s1s2 + 1, 1536, c1.schema()));
357 ASSERT_EQ(ERROR_SUCCESS, s1.s1_validate_digest(is_valid)); 358 ASSERT_EQ(ERROR_SUCCESS, s1.s1_validate_digest(is_valid));
358 ASSERT_TRUE(is_valid); 359 ASSERT_TRUE(is_valid);
359 360
360 c2s2 c2; 361 c2s2 c2;
361 - c2.parse(hs_bytes->c2); 362 + c2.parse(hs_bytes->c2, 1536);
362 ASSERT_EQ(ERROR_SUCCESS, c2.c2_validate(&s1, is_valid)); 363 ASSERT_EQ(ERROR_SUCCESS, c2.c2_validate(&s1, is_valid));
363 ASSERT_TRUE(is_valid); 364 ASSERT_TRUE(is_valid);
364 365
365 c2s2 s2; 366 c2s2 s2;
366 - s2.parse(hs_bytes->s0s1s2 + 1 + 1536); 367 + s2.parse(hs_bytes->s0s1s2 + 1 + 1536, 1536);
367 ASSERT_EQ(ERROR_SUCCESS, s2.s2_validate(&c1, is_valid)); 368 ASSERT_EQ(ERROR_SUCCESS, s2.s2_validate(&c1, is_valid));
368 ASSERT_TRUE(is_valid); 369 ASSERT_TRUE(is_valid);
369 } 370 }