int AmRtpStream::send( unsigned int ts, unsigned char* buffer, unsigned int size ) { if ((mute) || (hold)) return 0; if(!size) return -1; AmRtpPacket rp; rp.payload = payload; rp.marker = false; rp.sequence = sequence++; rp.timestamp = ts; rp.ssrc = l_ssrc; rp.compile((unsigned char*)buffer,size); rp.setAddr(&r_saddr); #ifdef WITH_ZRTP if (session->zrtp_audio) { zrtp_status_t status = zrtp_status_fail; unsigned int size = rp.getBufferSize(); status = zrtp_process_rtp(session->zrtp_audio, (char*)rp.getBuffer(), &size); switch (status) { case zrtp_status_drop: { DBG("ZRTP says: drop packet! %u - %u\n", size, rp.getBufferSize()); return 0; } case zrtp_status_ok: { // DBG("ZRTP says: ok!\n"); if (rp.getBufferSize() != size) // DBG("SEND packet size before: %d, after %d\n", // rp.getBufferSize(), size); rp.setBufferSize(size); } break; default: case zrtp_status_fail: { DBG("ZRTP says: fail!\n"); // DBG("(f)"); return 0; } } } #endif if(rp.send(l_sd) < 0){ ERROR("while sending RTP packet.\n"); return -1; } return size; }