Lines Matching refs:mms
32 #include "mms.h"
89 MMSContext mms;
102 MMSContext *mms = &mmst->mms;
103 mms->write_out_ptr = mms->out_buffer;
105 bytestream_put_le32(&mms->write_out_ptr, 1); // start sequence
106 bytestream_put_le32(&mms->write_out_ptr, 0xb00bface);
107 bytestream_put_le32(&mms->write_out_ptr, 0); // Length starts from after the protocol type bytes
108 bytestream_put_le32(&mms->write_out_ptr, MKTAG('M','M','S',' '));
109 bytestream_put_le32(&mms->write_out_ptr, 0);
110 bytestream_put_le32(&mms->write_out_ptr, mmst->outgoing_packet_seq++);
111 bytestream_put_le64(&mms->write_out_ptr, 0); // timestamp
112 bytestream_put_le32(&mms->write_out_ptr, 0);
113 bytestream_put_le16(&mms->write_out_ptr, packet_type);
114 bytestream_put_le16(&mms->write_out_ptr, 3); // direction to server
118 static void insert_command_prefixes(MMSContext *mms,
121 bytestream_put_le32(&mms->write_out_ptr, prefix1); // first prefix
122 bytestream_put_le32(&mms->write_out_ptr, prefix2); // second prefix
128 MMSContext *mms = &mmst->mms;
129 int len= mms->write_out_ptr - mms->out_buffer;
136 AV_WL32(mms->out_buffer + 8, first_length);
137 AV_WL32(mms->out_buffer + 16, len8);
138 AV_WL32(mms->out_buffer + 32, len8-2);
139 memset(mms->write_out_ptr, 0, exact_length - len);
142 write_result= ffurl_write(mms->mms_hd, mms->out_buffer, exact_length);
144 av_log(mms->mms_hd, AV_LOG_ERROR,
155 static int mms_put_utf16(MMSContext *mms, const uint8_t *src)
158 int size = mms->write_out_ptr - mms->out_buffer;
160 ffio_init_context(&bic, mms->write_out_ptr,
161 sizeof(mms->out_buffer) - size, 1, NULL, NULL, NULL, NULL);
166 mms->write_out_ptr += len;
173 insert_command_prefixes(&mmst->mms, 0x00f0f0f0, 0x0004000b);
181 MMSContext *mms = &mmst->mms;
184 insert_command_prefixes(mms, 0, 0xffffffff);
185 bytestream_put_le32(&mms->write_out_ptr, 0); // maxFunnelBytes
186 bytestream_put_le32(&mms->write_out_ptr, 0x00989680); // maxbitRate
187 bytestream_put_le32(&mms->write_out_ptr, 2); // funnelMode
196 if ((ret = mms_put_utf16(mms, data_string)) < 0)
204 MMSContext *mms = &mmst->mms;
206 insert_command_prefixes(mms, 1, 0xffffffff);
207 bytestream_put_le32(&mms->write_out_ptr, 0);
208 bytestream_put_le32(&mms->write_out_ptr, 0);
209 if ((ret = mms_put_utf16(mms, mmst->path + 1)) < 0) // +1 for skip "/"
217 MMSContext *mms = &mmst->mms;
218 av_log(mms->mms_hd, AV_LOG_TRACE, "Stream changing!\n");
221 mmst->header_packet_id= AV_RL32(mms->in_buffer + 40 + 7);
222 av_log(mms->mms_hd, AV_LOG_TRACE, "Changed header prefix to 0x%x", mmst->header_packet_id);
229 insert_command_prefixes(&mmst->mms, 1, 0x100FFFF);
235 static void pad_media_packet(MMSContext *mms)
237 if(mms->remaining_in_len<mms->asf_packet_len) {
238 int padding_size = mms->asf_packet_len - mms->remaining_in_len;
239 memset(mms->in_buffer + mms->remaining_in_len, 0, padding_size);
240 mms->remaining_in_len += padding_size;
249 MMSContext *mms = &mmst->mms;
251 read_result = ffurl_read_complete(mms->mms_hd, mms->in_buffer, 8);
254 av_log(mms->mms_hd, AV_LOG_ERROR,
259 av_log(mms->mms_hd, AV_LOG_ERROR,
267 if(AV_RL32(mms->in_buffer + 4)==0xb00bface) {
270 mmst->incoming_flags= mms->in_buffer[3];
271 read_result= ffurl_read_complete(mms->mms_hd, mms->in_buffer+8, 4);
273 av_log(mms->mms_hd, AV_LOG_ERROR,
281 length_remaining= AV_RL32(mms->in_buffer+8) + 4;
282 av_log(mms->mms_hd, AV_LOG_TRACE, "Length remaining is %d\n", length_remaining);
285 || length_remaining > sizeof(mms->in_buffer) - 12) {
286 av_log(mms->mms_hd, AV_LOG_ERROR,
288 length_remaining, sizeof(mms->in_buffer) - 12);
291 read_result = ffurl_read_complete(mms->mms_hd, mms->in_buffer + 12,
294 av_log(mms->mms_hd, AV_LOG_ERROR,
301 packet_type= AV_RL16(mms->in_buffer+36);
302 if (read_result >= 44 && (hr = AV_RL32(mms->in_buffer + 40))) {
303 av_log(mms->mms_hd, AV_LOG_ERROR,
314 tmp = AV_RL16(mms->in_buffer + 6);
316 mmst->incoming_packet_seq = AV_RL32(mms->in_buffer);
317 packet_id_type = mms->in_buffer[4];
318 mmst->incoming_flags = mms->in_buffer[5];
321 || length_remaining > sizeof(mms->in_buffer) - 8) {
322 av_log(mms->mms_hd, AV_LOG_ERROR,
324 length_remaining, sizeof(mms->in_buffer));
327 mms->remaining_in_len = length_remaining;
328 mms->read_in_ptr = mms->in_buffer;
329 read_result= ffurl_read_complete(mms->mms_hd, mms->in_buffer, length_remaining);
331 av_log(mms->mms_hd, AV_LOG_ERROR,
344 if(!mms->header_parsed) {
345 if ((err = av_reallocp(&mms->asf_header,
346 mms->asf_header_size +
347 mms->remaining_in_len)) < 0) {
348 mms->asf_header_size = 0;
351 memcpy(mms->asf_header + mms->asf_header_size,
352 mms->read_in_ptr, mms->remaining_in_len);
353 mms->asf_header_size += mms->remaining_in_len;
361 av_log(mms->mms_hd, AV_LOG_TRACE, "packet id type %d is old.", packet_id_type);
373 pad_media_packet(mms);
404 MMSContext *mms = &mmst->mms;
406 insert_command_prefixes(mms, 1, 0);
407 bytestream_put_le32(&mms->write_out_ptr, 0);
408 bytestream_put_le32(&mms->write_out_ptr, 0x00800000);
409 bytestream_put_le32(&mms->write_out_ptr, 0xffffffff);
410 bytestream_put_le32(&mms->write_out_ptr, 0);
411 bytestream_put_le32(&mms->write_out_ptr, 0);
412 bytestream_put_le32(&mms->write_out_ptr, 0);
415 bytestream_put_le32(&mms->write_out_ptr, 0);
416 bytestream_put_le32(&mms->write_out_ptr, 0x40AC2000);
417 bytestream_put_le32(&mms->write_out_ptr, 2);
418 bytestream_put_le32(&mms->write_out_ptr, 0);
428 MMSContext *mms = &mmst->mms;
438 insert_command_prefixes(mms, 0, 0x0004000b);
439 bytestream_put_le32(&mms->write_out_ptr, 0x0003001c);
440 if ((ret = mms_put_utf16(mms, data_string)) < 0)
449 MMSContext *mms = &mmst->mms;
452 bytestream_put_le32(&mms->write_out_ptr, mms->stream_num); // stream nums
453 for(i= 0; i<mms->stream_num; i++) {
454 bytestream_put_le16(&mms->write_out_ptr, 0xffff); // flags
455 bytestream_put_le16(&mms->write_out_ptr, mms->streams[i].id); // stream id
456 bytestream_put_le16(&mms->write_out_ptr, 0); // selection
464 insert_command_prefixes(&mmst->mms, 1, 1);
473 MMSContext *mms = &mmst->mms;
474 if(mms->mms_hd) {
476 ffurl_closep(&mms->mms_hd);
479 /* free all separately allocated pointers in mms */
480 av_freep(&mms->streams);
481 av_freep(&mms->asf_header);
488 MMSContext *mms = &mmst->mms;
490 insert_command_prefixes(mms, 1, 0x0001FFFF);
491 bytestream_put_le64(&mms->write_out_ptr, 0); // seek timestamp
492 bytestream_put_le32(&mms->write_out_ptr, 0xffffffff); // unknown
493 bytestream_put_le32(&mms->write_out_ptr, 0xffffffff); // packet offset
494 bytestream_put_byte(&mms->write_out_ptr, 0xff); // max stream time limit
495 bytestream_put_byte(&mms->write_out_ptr, 0xff); // max stream time limit
496 bytestream_put_byte(&mms->write_out_ptr, 0xff); // max stream time limit
497 bytestream_put_byte(&mms->write_out_ptr, 0x00); // stream time limit flag
500 bytestream_put_le32(&mms->write_out_ptr, mmst->packet_id);
505 static void clear_stream_buffers(MMSContext *mms)
507 mms->remaining_in_len = 0;
508 mms->read_in_ptr = mms->in_buffer;
514 MMSContext *mms;
519 mms = &mmst->mms;
531 err = ffurl_open_whitelist(&mms->mms_hd, tcpname, AVIO_FLAG_READ_WRITE,
563 err = ff_mms_asf_header_parser(mms);
568 mms->header_parsed = 1;
570 if (!mms->asf_packet_len || !mms->stream_num)
573 clear_stream_buffers(mms);
586 av_log(mms->mms_hd, AV_LOG_TRACE, "Leaving open (failure: %d)\n", err);
595 MMSContext *mms = &mmst->mms;
599 if(mms->asf_header_read_size < mms->asf_header_size) {
601 result = ff_mms_read_header(mms, buf, size);
602 } else if(mms->remaining_in_len) {
605 result = ff_mms_read_data(mms, buf, size);
610 if(mms->remaining_in_len>mms->asf_packet_len) {
613 mms->remaining_in_len, mms->asf_packet_len);
617 result = ff_mms_read_data(mms, buf, size);