session-android/jni/redphone/RtpPacket.cpp

78 lines
1.8 KiB
C++
Raw Normal View History

#include "RtpPacket.h"
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include "SrtpStream.h"
//#include <srtp.h>
RtpPacket::RtpPacket(char* packetBuf, int packetLen) {
packet = (char*)malloc(packetLen);
payloadLen = packetLen - sizeof(RtpHeader);
memcpy(packet, packetBuf, packetLen);
}
RtpPacket::RtpPacket(char* payload, int payloadBufLen, int sequenceNumber, int timestamp) {
packet = (char*)malloc(sizeof(RtpHeader) + payloadBufLen + SRTP_MAC_SIZE);
payloadLen = payloadBufLen;
memset(packet, 0, sizeof(RtpHeader) + payloadLen + SRTP_MAC_SIZE);
RtpHeader *header = (RtpHeader*)packet;
header->flags = htons(32768);
header->sequenceNumber = htons(sequenceNumber);
header->ssrc = 0;
header->timestamp = htonl(timestamp);
memcpy(packet + sizeof(RtpHeader), payload, payloadLen);
}
RtpPacket::~RtpPacket() {
free(packet);
}
uint16_t RtpPacket::getSequenceNumber() {
RtpHeader *header = (RtpHeader*)packet;
return ntohs(header->sequenceNumber);
}
int RtpPacket::getPayloadType() {
RtpHeader *header = (RtpHeader*)packet;
return header->flags & 0x7F;
}
uint32_t RtpPacket::getTimestamp() {
RtpHeader *header = (RtpHeader*)packet;
return ntohl(header->timestamp);
}
void RtpPacket::setTimestamp(uint32_t timestamp) {
RtpHeader *header = (RtpHeader*)packet;
header->timestamp = htonl(timestamp);
}
uint32_t RtpPacket::getSsrc() {
RtpHeader *header = (RtpHeader*)packet;
return ntohl(header->ssrc);
}
char* RtpPacket::getPayload() {
return packet + sizeof(RtpHeader);
}
uint32_t RtpPacket::getPayloadLen() {
return payloadLen;
}
void RtpPacket::setPayloadLen(uint32_t payloadLen) {
this->payloadLen = payloadLen;
}
char* RtpPacket::getSerializedPacket() {
return packet;
}
int RtpPacket::getSerializedPacketLen() {
return sizeof(RtpHeader) + payloadLen;
}