Current RTMP status
This commit is contained in:
		
							parent
							
								
									002d31a6c6
								
							
						
					
					
						commit
						5c78296d0e
					
				
					 1 changed files with 58 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
#include <iostream>
 | 
			
		||||
#include <cstdlib>
 | 
			
		||||
#include <cstdio>
 | 
			
		||||
#include <cmath>
 | 
			
		||||
 | 
			
		||||
struct Handshake_0 {
 | 
			
		||||
| 
						 | 
				
			
			@ -19,28 +20,32 @@ struct Handshake_2 {
 | 
			
		|||
};//Handshake_2
 | 
			
		||||
 | 
			
		||||
int main( ) {
 | 
			
		||||
 char blaat;
 | 
			
		||||
  srand( time( NULL ) );
 | 
			
		||||
  char next;
 | 
			
		||||
  char chunk_header[14];//Space to any chunk header imaginable. Basic header max 3, Chunck msg header max 11
 | 
			
		||||
  char extended_timestamp[4];//Not always used, so not included in header space.
 | 
			
		||||
  int chunkIDlenght;
 | 
			
		||||
  int chunkstream_id;
 | 
			
		||||
  Handshake_0 Client_0;
 | 
			
		||||
  Handshake_1 Client_1;
 | 
			
		||||
  Handshake_2 Client_2;
 | 
			
		||||
  Handshake_1 Server_1;
 | 
			
		||||
  Handshake_2 Server_2;
 | 
			
		||||
  /** Start Handshake **/
 | 
			
		||||
  
 | 
			
		||||
  /** Read C0 **/
 | 
			
		||||
  std::cin >> Client_0.Version;
 | 
			
		||||
  std::cin >> Client_1.Time;
 | 
			
		||||
  std::cin >> Client_1.Zero;
 | 
			
		||||
  std::cin >> Client_1.Random;
 | 
			
		||||
  Server_1.Time[0] = 0;
 | 
			
		||||
  Server_1.Time[1] = 0;
 | 
			
		||||
  Server_1.Time[2] = 0;
 | 
			
		||||
  Server_1.Time[3] = 4;
 | 
			
		||||
  Server_1.Zero[0] = 0;
 | 
			
		||||
  Server_1.Zero[1] = 0;
 | 
			
		||||
  Server_1.Zero[2] = 0;
 | 
			
		||||
  Server_1.Zero[3] = 0;
 | 
			
		||||
  for (int i = 0; i < 1528; i++) {
 | 
			
		||||
    Server_1.Random[i] = (rand() % 256);
 | 
			
		||||
  }
 | 
			
		||||
  /** Read C1 **/
 | 
			
		||||
  fread( Client_1.Time, 1, 4, stdin);
 | 
			
		||||
  fread( Client_1.Zero, 1, 4, stdin);
 | 
			
		||||
  fread( Client_1.Random, 1, 1528, stdin);
 | 
			
		||||
  /** Build S1 Packet **/
 | 
			
		||||
  Server_1.Time[0] = 0; Server_1.Time[1] = 0; Server_1.Time[2] = 0; Server_1.Time[3] = 4;
 | 
			
		||||
  Server_1.Zero[0] = 0; Server_1.Zero[1] = 0; Server_1.Zero[2] = 0; Server_1.Zero[3] = 0;
 | 
			
		||||
  for (int i = 0; i < 1528; i++) { Server_1.Random[i] = (rand() % 256); }
 | 
			
		||||
  /** Send S0 **/
 | 
			
		||||
  std::cout << Client_0.Version;
 | 
			
		||||
  /** Send S1 **/
 | 
			
		||||
  std::cout << Server_1.Time[0];
 | 
			
		||||
  std::cout << Server_1.Time[1];
 | 
			
		||||
  std::cout << Server_1.Time[2];
 | 
			
		||||
| 
						 | 
				
			
			@ -52,11 +57,15 @@ int main( ) {
 | 
			
		|||
  for (int i = 0; i < 1528; i++) {
 | 
			
		||||
    std::cout << Server_1.Random[i];
 | 
			
		||||
  }
 | 
			
		||||
  /** Flush output, just for certainty **/
 | 
			
		||||
  std::cout << std::flush;
 | 
			
		||||
  /** Build S2 Packet **/
 | 
			
		||||
  for (int i = 0; i < 4; i++ ) {
 | 
			
		||||
    Server_2.Time[i] = Client_1.Time[i];
 | 
			
		||||
    Server_2.Time2[i] = Server_2.Time[i];
 | 
			
		||||
  }
 | 
			
		||||
  Server_2.Time2[3] = Server_2.Time2[3] + 1;
 | 
			
		||||
  /** Send S2 **/
 | 
			
		||||
  std::cout << Server_2.Time[0];
 | 
			
		||||
  std::cout << Server_2.Time[1];
 | 
			
		||||
  std::cout << Server_2.Time[2];
 | 
			
		||||
| 
						 | 
				
			
			@ -68,8 +77,40 @@ int main( ) {
 | 
			
		|||
  for (int i = 0; i < 1528; i++) {
 | 
			
		||||
    std::cout << Client_1.Random[i];
 | 
			
		||||
  }
 | 
			
		||||
  while(std::cin.good()) {
 | 
			
		||||
    std::cin >> blaat;
 | 
			
		||||
  /** Flush, necessary in order to work **/
 | 
			
		||||
  std::cout << std::flush;
 | 
			
		||||
  /** Read C2 **/
 | 
			
		||||
  fread( Client_2.Time, 1, 4, stdin);
 | 
			
		||||
  fread( Client_2.Time2, 1, 4, stdin);
 | 
			
		||||
  fread( Client_2.Random_Echo, 1, 1528, stdin);
 | 
			
		||||
 | 
			
		||||
  /** Handshake done, continue with connect command **/
 | 
			
		||||
 | 
			
		||||
  next = std::cin.peek():
 | 
			
		||||
  if ((int)next > 63 || (int)next == 2) { exit(1); }//Connect command has a 11 byte header, ALWAYS, maximum value of first byte is then 63
 | 
			
		||||
  if ((int)next <= 63 && >= 3) {//1 byte chunkstream ID
 | 
			
		||||
    fread ( chunk_header, 1, 12, stdin );
 | 
			
		||||
    chunkIDlength = 1;
 | 
			
		||||
  } else if ((int) next == 0 ) {//2 bytes chunkstream ID
 | 
			
		||||
    fread ( chunk_header, 1, 13, stdin );
 | 
			
		||||
    chunkIDlength = 2;
 | 
			
		||||
  } else if ((int) next == 1 ) {//3 bytes chunkstream ID
 | 
			
		||||
    fread ( chunk_header, 1, 14, stdin );
 | 
			
		||||
    chunkIDlength = 3;
 | 
			
		||||
  }
 | 
			
		||||
  switch(chunkIDlength) {
 | 
			
		||||
    case 1: chunkstream_id = (int)chunk_header[0]; break;
 | 
			
		||||
    case 2: chunkstream_id = (int)chunk_header[1] + 64; break;
 | 
			
		||||
    case 3: chunkstream_id = ((int)chunk_header[2] * 256) + (int)chunk_header[1] + 64; break;
 | 
			
		||||
    default; exit(1); break;//Something went wrong
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ( chunk_header[chunkIdlength] == 0xFF && chunk_header[chunkIdlength+1] == 0xFF && chunk_header[chunkIdlength+2] == 0xFF ) {
 | 
			
		||||
    fread ( extended_timestamp, 1, 4, stdin); //read extended timestamp if 3-byte timestamp equals 0xFFFFFF
 | 
			
		||||
  } else {//set extended timestamp to 0
 | 
			
		||||
    extended_timestamp[0] = 0; extended_timestamp[1] = 0; extended_timestamp[2] = 0; extended_timestamp[3] = 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue