1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

for bug #235, fix bug of utest.

This commit is contained in:
winlin 2014-11-29 18:33:43 +08:00
parent e167c97786
commit 23f4aa5737
3 changed files with 67 additions and 12 deletions

View file

@ -464,8 +464,14 @@ namespace _srs_internal
return digest.digest; return digest.digest;
} }
char* c1s1_strategy::get_key()
{
return key.key;
}
int c1s1_strategy::dump(c1s1* owner, char* _c1s1, int size) int c1s1_strategy::dump(c1s1* owner, char* _c1s1, int size)
{ {
srs_assert(size == 1536);
return copy_to(owner, _c1s1, size, true); return copy_to(owner, _c1s1, size, true);
} }
@ -731,6 +737,12 @@ namespace _srs_internal
{ {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
if (with_digest) {
srs_assert(size == 1536);
} else {
srs_assert(size == 1504);
}
SrsStream stream; SrsStream stream;
if ((ret = stream.initialize(bytes, size)) != ERROR_SUCCESS) { if ((ret = stream.initialize(bytes, size)) != ERROR_SUCCESS) {
@ -794,6 +806,12 @@ namespace _srs_internal
{ {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
if (with_digest) {
srs_assert(size == 1536);
} else {
srs_assert(size == 1504);
}
SrsStream stream; SrsStream stream;
if ((ret = stream.initialize(bytes, size)) != ERROR_SUCCESS) { if ((ret = stream.initialize(bytes, size)) != ERROR_SUCCESS) {
@ -846,8 +864,15 @@ namespace _srs_internal
return payload->get_digest(); return payload->get_digest();
} }
char* c1s1::get_key()
{
srs_assert(payload != NULL);
return payload->get_key();
}
int c1s1::dump(char* _c1s1, int size) int c1s1::dump(char* _c1s1, int size)
{ {
srs_assert(size == 1536);
srs_assert(payload != NULL); srs_assert(payload != NULL);
return payload->dump(this, _c1s1, size); return payload->dump(this, _c1s1, size);
} }

View file

@ -205,11 +205,16 @@ namespace _srs_internal
*/ */
virtual srs_schema_type schema() = 0; virtual srs_schema_type schema() = 0;
/** /**
* get the digest key. * get the digest.
*/ */
virtual char* get_digest(); virtual char* get_digest();
/** /**
* get the key.
*/
virtual char* get_key();
/**
* copy to bytes. * copy to bytes.
* @param size must be 1536.
*/ */
virtual int dump(c1s1* owner, char* _c1s1, int size); virtual int dump(c1s1* owner, char* _c1s1, int size);
/** /**
@ -246,15 +251,31 @@ namespace _srs_internal
* server: validate the parsed s1 schema * server: validate the parsed s1 schema
*/ */
virtual int s1_validate_digest(c1s1* owner, bool& is_valid); virtual int s1_validate_digest(c1s1* owner, bool& is_valid);
protected: public:
/**
* calc the digest for c1
*/
virtual int calc_c1_digest(c1s1* owner, char*& c1_digest); virtual int calc_c1_digest(c1s1* owner, char*& c1_digest);
/**
* calc the digest for s1
*/
virtual int calc_s1_digest(c1s1* owner, char*& s1_digest); virtual int calc_s1_digest(c1s1* owner, char*& s1_digest);
/** /**
* copy whole c1s1 to bytes. * copy whole c1s1 to bytes.
* @param size must always be 1536 with digest, and 1504 without digest.
*/ */
virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest) = 0; virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest) = 0;
/**
* copy time and version to stream.
*/
virtual void copy_time_version(SrsStream* stream, c1s1* owner); virtual void copy_time_version(SrsStream* stream, c1s1* owner);
/**
* copy key to stream.
*/
virtual void copy_key(SrsStream* stream); virtual void copy_key(SrsStream* stream);
/**
* copy digest to stream.
*/
virtual void copy_digest(SrsStream* stream, bool with_digest); virtual void copy_digest(SrsStream* stream, bool with_digest);
}; };
@ -271,7 +292,7 @@ namespace _srs_internal
public: public:
virtual srs_schema_type schema(); virtual srs_schema_type schema();
virtual int parse(char* _c1s1, int size); virtual int parse(char* _c1s1, int size);
private: public:
virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest); virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest);
}; };
@ -288,7 +309,7 @@ namespace _srs_internal
public: public:
virtual srs_schema_type schema(); virtual srs_schema_type schema();
virtual int parse(char* _c1s1, int size); virtual int parse(char* _c1s1, int size);
private: public:
virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest); virtual int copy_to(c1s1* owner, char* bytes, int size, bool with_digest);
}; };
@ -326,13 +347,19 @@ namespace _srs_internal
* get the digest key. * get the digest key.
*/ */
virtual char* get_digest(); virtual char* get_digest();
/**
* get the key.
*/
virtual char* get_key();
public: public:
/** /**
* copy to bytes. * copy to bytes.
* @param size, must always be 1536.
*/ */
virtual int dump(char* _c1s1, int size); virtual int dump(char* _c1s1, int size);
/** /**
* server: parse the c1s1, discovery the key and digest by schema. * server: parse the c1s1, discovery the key and digest by schema.
* @param size, must always be 1536.
* use the c1_validate_digest() to valid the digest of c1. * use the c1_validate_digest() to valid the digest of c1.
* use the s1_validate_digest() to valid the digest of s1. * use the s1_validate_digest() to valid the digest of s1.
*/ */
@ -409,10 +436,12 @@ namespace _srs_internal
public: public:
/** /**
* copy to bytes. * copy to bytes.
* @param size, must always be 1536.
*/ */
virtual int dump(char* _c2s2, int size); virtual int dump(char* _c2s2, int size);
/** /**
* parse the c2s2 * parse the c2s2
* @param size, must always be 1536.
*/ */
virtual int parse(char* _c2s2, int size); virtual int parse(char* _c2s2, int size);
public: public:

View file

@ -285,14 +285,15 @@ VOID TEST(ProtocolHandshakeTest, VerifyFPC0C1)
c1s1 c1; c1s1 c1;
// the schema of data must be schema0: key-digest. // the schema of data must be schema0: key-digest.
ASSERT_EQ(ERROR_SUCCESS, c1.parse(c0c1 + 1, srs_schema0)); ASSERT_EQ(ERROR_SUCCESS, c1.parse(c0c1 + 1, 1536, srs_schema0));
EXPECT_EQ((int32_t)0x000f64d0, c1.time); EXPECT_EQ((int32_t)0x000f64d0, c1.time);
EXPECT_EQ((int32_t)0x80000702, c1.version); EXPECT_EQ((int32_t)0x80000702, c1.version);
// manually validate the c1 // manually validate the c1
// @see: calc_c1_digest // @see: calc_c1_digest
char* c1s1_joined_bytes = srs_bytes_join_schema0(c1.time, c1.version, &c1.block0.key, &c1.block1.digest); char* c1s1_joined_bytes = new char[1536 -32];
SrsAutoFree(char, c1s1_joined_bytes); SrsAutoFree(char, c1s1_joined_bytes);
ASSERT_EQ(ERROR_SUCCESS, c1.payload->copy_to(&c1, c1s1_joined_bytes, 1536 - 32, false));
bool is_valid; bool is_valid;
ASSERT_EQ(ERROR_SUCCESS, c1.c1_validate_digest(is_valid)); ASSERT_EQ(ERROR_SUCCESS, c1.c1_validate_digest(is_valid));
@ -304,14 +305,14 @@ VOID TEST(ProtocolHandshakeTest, VerifyFPC0C1)
(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, (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,
(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 (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
}; };
EXPECT_TRUE(srs_bytes_equals(c1.block0.key.key, key, 128)); EXPECT_TRUE(srs_bytes_equals(c1.get_key(), key, 128));
// 32bytes digest // 32bytes digest
char digest[] = { char digest[] = {
(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, (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,
(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 (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
}; };
EXPECT_TRUE(srs_bytes_equals(c1.block1.digest.digest, digest, 32)); EXPECT_TRUE(srs_bytes_equals(c1.get_digest(), digest, 32));
} }
VOID TEST(ProtocolHandshakeTest, ComplexHandshake) VOID TEST(ProtocolHandshakeTest, ComplexHandshake)
@ -348,22 +349,22 @@ VOID TEST(ProtocolHandshakeTest, ComplexHandshake)
bool is_valid; bool is_valid;
c1s1 c1; c1s1 c1;
ASSERT_EQ(ERROR_SUCCESS, c1.parse(hs_bytes->c0c1 + 1, srs_schema0)); ASSERT_EQ(ERROR_SUCCESS, c1.parse(hs_bytes->c0c1 + 1, 1536, srs_schema0));
ASSERT_EQ(ERROR_SUCCESS, c1.c1_validate_digest(is_valid)); ASSERT_EQ(ERROR_SUCCESS, c1.c1_validate_digest(is_valid));
ASSERT_TRUE(is_valid); ASSERT_TRUE(is_valid);
c1s1 s1; c1s1 s1;
ASSERT_EQ(ERROR_SUCCESS, s1.parse(hs_bytes->s0s1s2 + 1, c1.schema)); ASSERT_EQ(ERROR_SUCCESS, s1.parse(hs_bytes->s0s1s2 + 1, 1536, c1.schema()));
ASSERT_EQ(ERROR_SUCCESS, s1.s1_validate_digest(is_valid)); ASSERT_EQ(ERROR_SUCCESS, s1.s1_validate_digest(is_valid));
ASSERT_TRUE(is_valid); ASSERT_TRUE(is_valid);
c2s2 c2; c2s2 c2;
c2.parse(hs_bytes->c2); c2.parse(hs_bytes->c2, 1536);
ASSERT_EQ(ERROR_SUCCESS, c2.c2_validate(&s1, is_valid)); ASSERT_EQ(ERROR_SUCCESS, c2.c2_validate(&s1, is_valid));
ASSERT_TRUE(is_valid); ASSERT_TRUE(is_valid);
c2s2 s2; c2s2 s2;
s2.parse(hs_bytes->s0s1s2 + 1 + 1536); s2.parse(hs_bytes->s0s1s2 + 1 + 1536, 1536);
ASSERT_EQ(ERROR_SUCCESS, s2.s2_validate(&c1, is_valid)); ASSERT_EQ(ERROR_SUCCESS, s2.s2_validate(&c1, is_valid));
ASSERT_TRUE(is_valid); ASSERT_TRUE(is_valid);
} }