2005-05-11 07:44:44 +00:00
|
|
|
/* GStreamer
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
* Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
|
2005-05-11 07:44:44 +00:00
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Library General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Library General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Library General Public
|
|
|
|
* License along with this library; if not, write to the
|
|
|
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
|
|
* Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
/*
|
|
|
|
* Unless otherwise indicated, Source Code is licensed under MIT license.
|
|
|
|
* See further explanation attached in License Statement (distributed in the file
|
|
|
|
* LICENSE).
|
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
|
|
* this software and associated documentation files (the "Software"), to deal in
|
|
|
|
* the Software without restriction, including without limitation the rights to
|
|
|
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
|
|
* of the Software, and to permit persons to whom the Software is furnished to do
|
|
|
|
* so, subject to the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice shall be included in all
|
|
|
|
* copies or substantial portions of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
|
* SOFTWARE.
|
|
|
|
*/
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include "sdpmessage.h"
|
|
|
|
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
/* FIXME, is currently allocated on the stack */
|
|
|
|
#define MAX_LINE_LEN 1024 * 16
|
|
|
|
|
2005-12-06 19:44:58 +00:00
|
|
|
#define FREE_STRING(field) g_free ((field)); (field) = NULL;
|
|
|
|
#define FREE_ARRAY(field) \
|
|
|
|
G_STMT_START { \
|
|
|
|
if (field) \
|
|
|
|
g_array_free (field, TRUE); \
|
|
|
|
field = NULL; \
|
2005-05-11 07:44:44 +00:00
|
|
|
} G_STMT_END
|
2005-12-06 19:44:58 +00:00
|
|
|
#define REPLACE_STRING(field,val) FREE_STRING(field);field=g_strdup (val);
|
2005-05-11 07:44:44 +00:00
|
|
|
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
#define INIT_ARRAY(field,type,init_func) \
|
|
|
|
G_STMT_START { \
|
|
|
|
if (field) { \
|
|
|
|
gint i; \
|
|
|
|
for(i=0; i<field->len; i++) \
|
|
|
|
init_func (&g_array_index(field, type, i)); \
|
|
|
|
g_array_set_size (field,0); \
|
|
|
|
} \
|
|
|
|
else \
|
2005-12-06 19:44:58 +00:00
|
|
|
field = g_array_new (FALSE, TRUE, sizeof(type)); \
|
2005-05-11 07:44:44 +00:00
|
|
|
} G_STMT_END
|
|
|
|
|
2005-12-06 19:44:58 +00:00
|
|
|
#define DEFINE_STRING_SETTER(field) \
|
|
|
|
RTSPResult sdp_message_set_##field (SDPMessage *msg, gchar *val) { \
|
|
|
|
g_free (msg->field); \
|
|
|
|
msg->field = g_strdup (val); \
|
|
|
|
return RTSP_OK; \
|
2005-05-11 07:44:44 +00:00
|
|
|
}
|
2005-12-06 19:44:58 +00:00
|
|
|
#define DEFINE_STRING_GETTER(field) \
|
|
|
|
char* sdp_message_get_##field (SDPMessage *msg) { \
|
|
|
|
return msg->field; \
|
2005-05-11 07:44:44 +00:00
|
|
|
}
|
|
|
|
|
2005-12-06 19:44:58 +00:00
|
|
|
#define DEFINE_ARRAY_LEN(field) \
|
|
|
|
gint sdp_message_##field##_len (SDPMessage *msg) { \
|
|
|
|
return ((msg)->field->len); \
|
2005-05-11 07:44:44 +00:00
|
|
|
}
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
#define DEFINE_ARRAY_GETTER(method,field,type) \
|
|
|
|
type sdp_message_get_##method (SDPMessage *msg, guint idx) { \
|
|
|
|
return g_array_index ((msg)->field, type, idx); \
|
2005-05-11 07:44:44 +00:00
|
|
|
}
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
#define DEFINE_ARRAY_P_GETTER(method,field,type) \
|
|
|
|
type * sdp_message_get_##method (SDPMessage *msg, guint idx) { \
|
|
|
|
return &g_array_index ((msg)->field, type, idx); \
|
2005-05-11 07:44:44 +00:00
|
|
|
}
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
#define DEFINE_ARRAY_ADDER(method,field,type,dup_method) \
|
2005-12-06 19:44:58 +00:00
|
|
|
RTSPResult sdp_message_add_##method (SDPMessage *msg, type val) { \
|
|
|
|
type v = dup_method(val); \
|
|
|
|
g_array_append_val((msg)->field, v); \
|
|
|
|
return RTSP_OK; \
|
2005-05-11 07:44:44 +00:00
|
|
|
}
|
|
|
|
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
static void
|
|
|
|
sdp_origin_init (SDPOrigin * origin)
|
|
|
|
{
|
|
|
|
FREE_STRING (origin->username);
|
|
|
|
FREE_STRING (origin->sess_id);
|
|
|
|
FREE_STRING (origin->sess_version);
|
|
|
|
FREE_STRING (origin->nettype);
|
|
|
|
FREE_STRING (origin->addrtype);
|
|
|
|
FREE_STRING (origin->addr);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
sdp_connection_init (SDPConnection * connection)
|
|
|
|
{
|
|
|
|
FREE_STRING (connection->nettype);
|
|
|
|
FREE_STRING (connection->addrtype);
|
|
|
|
FREE_STRING (connection->address);
|
|
|
|
connection->ttl = 0;
|
|
|
|
connection->addr_number = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
sdp_bandwidth_init (SDPBandwidth * bandwidth)
|
|
|
|
{
|
|
|
|
FREE_STRING (bandwidth->bwtype);
|
|
|
|
bandwidth->bandwidth = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
sdp_time_init (SDPTime * time)
|
|
|
|
{
|
|
|
|
FREE_STRING (time->start);
|
|
|
|
FREE_STRING (time->stop);
|
|
|
|
time->n_repeat = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
sdp_zone_init (SDPZone * zone)
|
|
|
|
{
|
|
|
|
FREE_STRING (zone->time);
|
|
|
|
FREE_STRING (zone->typed_time);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
sdp_key_init (SDPKey * key)
|
|
|
|
{
|
|
|
|
FREE_STRING (key->type);
|
|
|
|
FREE_STRING (key->data);
|
|
|
|
}
|
2005-05-11 07:44:44 +00:00
|
|
|
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
static void
|
|
|
|
sdp_attribute_init (SDPAttribute * attr)
|
|
|
|
{
|
|
|
|
FREE_STRING (attr->key);
|
|
|
|
FREE_STRING (attr->value);
|
|
|
|
}
|
2005-05-11 07:44:44 +00:00
|
|
|
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
/**
|
|
|
|
* sdp_message_new:
|
|
|
|
* @msg: pointer to new #SDPMessage
|
|
|
|
*
|
|
|
|
* Allocate a new SDPMessage and store the result in @msg.
|
|
|
|
*
|
|
|
|
* Returns: a #RTSPResult.
|
|
|
|
*/
|
2005-05-11 07:44:44 +00:00
|
|
|
RTSPResult
|
|
|
|
sdp_message_new (SDPMessage ** msg)
|
|
|
|
{
|
|
|
|
SDPMessage *newmsg;
|
|
|
|
|
gst/rtsp/gstrtspsrc.*: Small cleanups, added documentation.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_media_to_caps),
(gst_rtspsrc_send), (gst_rtspsrc_parse_methods),
(gst_rtspsrc_open), (gst_rtspsrc_close), (gst_rtspsrc_play),
(gst_rtspsrc_pause), (gst_rtspsrc_change_state),
(gst_rtspsrc_uri_get_uri), (gst_rtspsrc_uri_set_uri):
* gst/rtsp/gstrtspsrc.h:
Small cleanups, added documentation.
Try to clean up the requests and responses.
Refactor parsing the supported methods.
* gst/rtsp/rtspconnection.c: (rtsp_connection_open),
(rtsp_connection_create), (rtsp_connection_send),
(parse_response_status), (parse_request_line),
(rtsp_connection_receive), (rtsp_connection_close),
(rtsp_connection_free):
* gst/rtsp/rtsptransport.c: (rtsp_transport_new),
(rtsp_transport_init), (rtsp_transport_parse),
(rtsp_transport_free):
* gst/rtsp/rtspurl.c: (rtsp_url_parse):
* gst/rtsp/sdpmessage.c: (sdp_message_new), (sdp_message_init),
(sdp_message_clean), (sdp_message_free), (sdp_media_new),
(sdp_media_init), (sdp_message_parse_buffer), (sdp_message_dump):
Use g_return_val some more.
* gst/rtsp/rtspdefs.h:
Add more enum values to track initial states.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_request),
(rtsp_message_init_request), (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free),
(rtsp_message_add_header), (rtsp_message_remove_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_take_body), (rtsp_message_get_body),
(rtsp_message_steal_body), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
Reorder arguments, object goes as the first one.
Use g_return_val some more.
2006-09-18 17:37:46 +00:00
|
|
|
g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
newmsg = g_new0 (SDPMessage, 1);
|
|
|
|
|
|
|
|
*msg = newmsg;
|
|
|
|
|
|
|
|
return sdp_message_init (newmsg);
|
|
|
|
}
|
|
|
|
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
/**
|
|
|
|
* sdp_message_init:
|
|
|
|
* @msg: an #SDPMessage
|
|
|
|
*
|
|
|
|
* Initialize @msg so that its contents are as if it was freshly allocated
|
|
|
|
* with sdp_message_new(). This function is mostly used to initialize a message
|
|
|
|
* allocated on the stack. sdp_message_uninit() undoes this operation.
|
|
|
|
*
|
2007-02-14 17:04:47 +00:00
|
|
|
* When this function is invoked on newly allocated data (with malloc or on the
|
|
|
|
* stack), its contents should be set to 0 before calling this function.
|
|
|
|
*
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
* Returns: a #RTSPResult.
|
|
|
|
*/
|
2005-05-11 07:44:44 +00:00
|
|
|
RTSPResult
|
|
|
|
sdp_message_init (SDPMessage * msg)
|
|
|
|
{
|
gst/rtsp/gstrtspsrc.*: Small cleanups, added documentation.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_media_to_caps),
(gst_rtspsrc_send), (gst_rtspsrc_parse_methods),
(gst_rtspsrc_open), (gst_rtspsrc_close), (gst_rtspsrc_play),
(gst_rtspsrc_pause), (gst_rtspsrc_change_state),
(gst_rtspsrc_uri_get_uri), (gst_rtspsrc_uri_set_uri):
* gst/rtsp/gstrtspsrc.h:
Small cleanups, added documentation.
Try to clean up the requests and responses.
Refactor parsing the supported methods.
* gst/rtsp/rtspconnection.c: (rtsp_connection_open),
(rtsp_connection_create), (rtsp_connection_send),
(parse_response_status), (parse_request_line),
(rtsp_connection_receive), (rtsp_connection_close),
(rtsp_connection_free):
* gst/rtsp/rtsptransport.c: (rtsp_transport_new),
(rtsp_transport_init), (rtsp_transport_parse),
(rtsp_transport_free):
* gst/rtsp/rtspurl.c: (rtsp_url_parse):
* gst/rtsp/sdpmessage.c: (sdp_message_new), (sdp_message_init),
(sdp_message_clean), (sdp_message_free), (sdp_media_new),
(sdp_media_init), (sdp_message_parse_buffer), (sdp_message_dump):
Use g_return_val some more.
* gst/rtsp/rtspdefs.h:
Add more enum values to track initial states.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_request),
(rtsp_message_init_request), (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free),
(rtsp_message_add_header), (rtsp_message_remove_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_take_body), (rtsp_message_get_body),
(rtsp_message_steal_body), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
Reorder arguments, object goes as the first one.
Use g_return_val some more.
2006-09-18 17:37:46 +00:00
|
|
|
g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
FREE_STRING (msg->version);
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
sdp_origin_init (&msg->origin);
|
2005-05-11 07:44:44 +00:00
|
|
|
FREE_STRING (msg->session_name);
|
|
|
|
FREE_STRING (msg->information);
|
|
|
|
FREE_STRING (msg->uri);
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
INIT_ARRAY (msg->emails, gchar *, g_free);
|
|
|
|
INIT_ARRAY (msg->phones, gchar *, g_free);
|
|
|
|
sdp_connection_init (&msg->connection);
|
|
|
|
INIT_ARRAY (msg->bandwidths, SDPBandwidth, sdp_bandwidth_init);
|
|
|
|
INIT_ARRAY (msg->times, SDPTime, sdp_time_init);
|
|
|
|
INIT_ARRAY (msg->zones, SDPZone, sdp_zone_init);
|
|
|
|
sdp_key_init (&msg->key);
|
|
|
|
INIT_ARRAY (msg->attributes, SDPAttribute, sdp_attribute_init);
|
|
|
|
INIT_ARRAY (msg->medias, SDPMedia, sdp_media_uninit);
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
/**
|
|
|
|
* sdp_message_uninit:
|
|
|
|
* @msg: an #SDPMessage
|
|
|
|
*
|
|
|
|
* Free all resources allocated in @msg. @msg should not be used anymore after
|
|
|
|
* this function. This function should be used when @msg was allocated on the
|
|
|
|
* stack and initialized with sdp_message_init().
|
|
|
|
*
|
|
|
|
* Returns: a #RTSPResult.
|
|
|
|
*/
|
2005-05-11 07:44:44 +00:00
|
|
|
RTSPResult
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
sdp_message_uninit (SDPMessage * msg)
|
2005-05-11 07:44:44 +00:00
|
|
|
{
|
gst/rtsp/gstrtspsrc.*: Small cleanups, added documentation.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_media_to_caps),
(gst_rtspsrc_send), (gst_rtspsrc_parse_methods),
(gst_rtspsrc_open), (gst_rtspsrc_close), (gst_rtspsrc_play),
(gst_rtspsrc_pause), (gst_rtspsrc_change_state),
(gst_rtspsrc_uri_get_uri), (gst_rtspsrc_uri_set_uri):
* gst/rtsp/gstrtspsrc.h:
Small cleanups, added documentation.
Try to clean up the requests and responses.
Refactor parsing the supported methods.
* gst/rtsp/rtspconnection.c: (rtsp_connection_open),
(rtsp_connection_create), (rtsp_connection_send),
(parse_response_status), (parse_request_line),
(rtsp_connection_receive), (rtsp_connection_close),
(rtsp_connection_free):
* gst/rtsp/rtsptransport.c: (rtsp_transport_new),
(rtsp_transport_init), (rtsp_transport_parse),
(rtsp_transport_free):
* gst/rtsp/rtspurl.c: (rtsp_url_parse):
* gst/rtsp/sdpmessage.c: (sdp_message_new), (sdp_message_init),
(sdp_message_clean), (sdp_message_free), (sdp_media_new),
(sdp_media_init), (sdp_message_parse_buffer), (sdp_message_dump):
Use g_return_val some more.
* gst/rtsp/rtspdefs.h:
Add more enum values to track initial states.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_request),
(rtsp_message_init_request), (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free),
(rtsp_message_add_header), (rtsp_message_remove_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_take_body), (rtsp_message_get_body),
(rtsp_message_steal_body), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
Reorder arguments, object goes as the first one.
Use g_return_val some more.
2006-09-18 17:37:46 +00:00
|
|
|
g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
|
2005-05-11 07:44:44 +00:00
|
|
|
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
sdp_message_init (msg);
|
|
|
|
|
2005-05-11 07:44:44 +00:00
|
|
|
FREE_ARRAY (msg->emails);
|
|
|
|
FREE_ARRAY (msg->phones);
|
|
|
|
FREE_ARRAY (msg->bandwidths);
|
|
|
|
FREE_ARRAY (msg->times);
|
|
|
|
FREE_ARRAY (msg->zones);
|
|
|
|
FREE_ARRAY (msg->attributes);
|
|
|
|
FREE_ARRAY (msg->medias);
|
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
/**
|
|
|
|
* sdp_message_free:
|
|
|
|
* @msg: an #SDPMessage
|
|
|
|
*
|
|
|
|
* Free all resources allocated by @msg. @msg should not be used anymore after
|
|
|
|
* this function. This function should be used when @msg was dynamically
|
|
|
|
* allocated with sdp_message_new().
|
|
|
|
*
|
|
|
|
* Returns: a #RTSPResult.
|
|
|
|
*/
|
2005-05-11 07:44:44 +00:00
|
|
|
RTSPResult
|
|
|
|
sdp_message_free (SDPMessage * msg)
|
|
|
|
{
|
gst/rtsp/gstrtspsrc.*: Small cleanups, added documentation.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_media_to_caps),
(gst_rtspsrc_send), (gst_rtspsrc_parse_methods),
(gst_rtspsrc_open), (gst_rtspsrc_close), (gst_rtspsrc_play),
(gst_rtspsrc_pause), (gst_rtspsrc_change_state),
(gst_rtspsrc_uri_get_uri), (gst_rtspsrc_uri_set_uri):
* gst/rtsp/gstrtspsrc.h:
Small cleanups, added documentation.
Try to clean up the requests and responses.
Refactor parsing the supported methods.
* gst/rtsp/rtspconnection.c: (rtsp_connection_open),
(rtsp_connection_create), (rtsp_connection_send),
(parse_response_status), (parse_request_line),
(rtsp_connection_receive), (rtsp_connection_close),
(rtsp_connection_free):
* gst/rtsp/rtsptransport.c: (rtsp_transport_new),
(rtsp_transport_init), (rtsp_transport_parse),
(rtsp_transport_free):
* gst/rtsp/rtspurl.c: (rtsp_url_parse):
* gst/rtsp/sdpmessage.c: (sdp_message_new), (sdp_message_init),
(sdp_message_clean), (sdp_message_free), (sdp_media_new),
(sdp_media_init), (sdp_message_parse_buffer), (sdp_message_dump):
Use g_return_val some more.
* gst/rtsp/rtspdefs.h:
Add more enum values to track initial states.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_request),
(rtsp_message_init_request), (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free),
(rtsp_message_add_header), (rtsp_message_remove_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_take_body), (rtsp_message_get_body),
(rtsp_message_steal_body), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
Reorder arguments, object goes as the first one.
Use g_return_val some more.
2006-09-18 17:37:46 +00:00
|
|
|
g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
|
2005-05-11 07:44:44 +00:00
|
|
|
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
sdp_message_uninit (msg);
|
2005-05-11 07:44:44 +00:00
|
|
|
g_free (msg);
|
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
/**
|
|
|
|
* sdp_media_new:
|
|
|
|
* @media: pointer to new #SDPMedia
|
|
|
|
*
|
|
|
|
* Allocate a new SDPMedia and store the result in @media.
|
|
|
|
*
|
|
|
|
* Returns: a #RTSPResult.
|
|
|
|
*/
|
2005-05-11 07:44:44 +00:00
|
|
|
RTSPResult
|
|
|
|
sdp_media_new (SDPMedia ** media)
|
|
|
|
{
|
|
|
|
SDPMedia *newmedia;
|
|
|
|
|
gst/rtsp/gstrtspsrc.*: Small cleanups, added documentation.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_media_to_caps),
(gst_rtspsrc_send), (gst_rtspsrc_parse_methods),
(gst_rtspsrc_open), (gst_rtspsrc_close), (gst_rtspsrc_play),
(gst_rtspsrc_pause), (gst_rtspsrc_change_state),
(gst_rtspsrc_uri_get_uri), (gst_rtspsrc_uri_set_uri):
* gst/rtsp/gstrtspsrc.h:
Small cleanups, added documentation.
Try to clean up the requests and responses.
Refactor parsing the supported methods.
* gst/rtsp/rtspconnection.c: (rtsp_connection_open),
(rtsp_connection_create), (rtsp_connection_send),
(parse_response_status), (parse_request_line),
(rtsp_connection_receive), (rtsp_connection_close),
(rtsp_connection_free):
* gst/rtsp/rtsptransport.c: (rtsp_transport_new),
(rtsp_transport_init), (rtsp_transport_parse),
(rtsp_transport_free):
* gst/rtsp/rtspurl.c: (rtsp_url_parse):
* gst/rtsp/sdpmessage.c: (sdp_message_new), (sdp_message_init),
(sdp_message_clean), (sdp_message_free), (sdp_media_new),
(sdp_media_init), (sdp_message_parse_buffer), (sdp_message_dump):
Use g_return_val some more.
* gst/rtsp/rtspdefs.h:
Add more enum values to track initial states.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_request),
(rtsp_message_init_request), (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free),
(rtsp_message_add_header), (rtsp_message_remove_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_take_body), (rtsp_message_get_body),
(rtsp_message_steal_body), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
Reorder arguments, object goes as the first one.
Use g_return_val some more.
2006-09-18 17:37:46 +00:00
|
|
|
g_return_val_if_fail (media != NULL, RTSP_EINVAL);
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
newmedia = g_new0 (SDPMedia, 1);
|
|
|
|
|
|
|
|
*media = newmedia;
|
|
|
|
|
|
|
|
return sdp_media_init (newmedia);
|
|
|
|
}
|
|
|
|
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
/**
|
|
|
|
* sdp_media_init:
|
|
|
|
* @media: a #SDPMedia
|
|
|
|
*
|
|
|
|
* Initialize @media so that its contents are as if it was freshly allocated
|
|
|
|
* with sdp_media_new(). This function is mostly used to initialize a media
|
|
|
|
* allocated on the stack. sdp_media_uninit() undoes this operation.
|
|
|
|
*
|
2007-02-14 17:04:47 +00:00
|
|
|
* When this function is invoked on newly allocated data (with malloc or on the
|
|
|
|
* stack), its contents should be set to 0 before calling this function.
|
|
|
|
*
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
* Returns: a #RTSPResult.
|
|
|
|
*/
|
2005-05-11 07:44:44 +00:00
|
|
|
RTSPResult
|
|
|
|
sdp_media_init (SDPMedia * media)
|
|
|
|
{
|
gst/rtsp/gstrtspsrc.*: Small cleanups, added documentation.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_media_to_caps),
(gst_rtspsrc_send), (gst_rtspsrc_parse_methods),
(gst_rtspsrc_open), (gst_rtspsrc_close), (gst_rtspsrc_play),
(gst_rtspsrc_pause), (gst_rtspsrc_change_state),
(gst_rtspsrc_uri_get_uri), (gst_rtspsrc_uri_set_uri):
* gst/rtsp/gstrtspsrc.h:
Small cleanups, added documentation.
Try to clean up the requests and responses.
Refactor parsing the supported methods.
* gst/rtsp/rtspconnection.c: (rtsp_connection_open),
(rtsp_connection_create), (rtsp_connection_send),
(parse_response_status), (parse_request_line),
(rtsp_connection_receive), (rtsp_connection_close),
(rtsp_connection_free):
* gst/rtsp/rtsptransport.c: (rtsp_transport_new),
(rtsp_transport_init), (rtsp_transport_parse),
(rtsp_transport_free):
* gst/rtsp/rtspurl.c: (rtsp_url_parse):
* gst/rtsp/sdpmessage.c: (sdp_message_new), (sdp_message_init),
(sdp_message_clean), (sdp_message_free), (sdp_media_new),
(sdp_media_init), (sdp_message_parse_buffer), (sdp_message_dump):
Use g_return_val some more.
* gst/rtsp/rtspdefs.h:
Add more enum values to track initial states.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_request),
(rtsp_message_init_request), (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free),
(rtsp_message_add_header), (rtsp_message_remove_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_take_body), (rtsp_message_get_body),
(rtsp_message_steal_body), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
Reorder arguments, object goes as the first one.
Use g_return_val some more.
2006-09-18 17:37:46 +00:00
|
|
|
g_return_val_if_fail (media != NULL, RTSP_EINVAL);
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
FREE_STRING (media->media);
|
|
|
|
media->port = 0;
|
|
|
|
media->num_ports = 0;
|
|
|
|
FREE_STRING (media->proto);
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
INIT_ARRAY (media->fmts, gchar *, g_free);
|
2005-05-11 07:44:44 +00:00
|
|
|
FREE_STRING (media->information);
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
INIT_ARRAY (media->connections, SDPConnection, sdp_connection_init);
|
|
|
|
INIT_ARRAY (media->bandwidths, SDPBandwidth, sdp_bandwidth_init);
|
|
|
|
sdp_key_init (&media->key);
|
|
|
|
INIT_ARRAY (media->attributes, SDPAttribute, sdp_attribute_init);
|
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* sdp_media_uninit:
|
|
|
|
* @media: an #SDPMedia
|
|
|
|
*
|
|
|
|
* Free all resources allocated in @media. @media should not be used anymore after
|
|
|
|
* this function. This function should be used when @media was allocated on the
|
|
|
|
* stack and initialized with sdp_media_init().
|
|
|
|
*
|
|
|
|
* Returns: a #RTSPResult.
|
|
|
|
*/
|
|
|
|
RTSPResult
|
|
|
|
sdp_media_uninit (SDPMedia * media)
|
|
|
|
{
|
|
|
|
g_return_val_if_fail (media != NULL, RTSP_EINVAL);
|
|
|
|
|
|
|
|
sdp_media_init (media);
|
|
|
|
FREE_ARRAY (media->fmts);
|
|
|
|
FREE_ARRAY (media->connections);
|
|
|
|
FREE_ARRAY (media->bandwidths);
|
|
|
|
FREE_ARRAY (media->attributes);
|
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* sdp_media_free:
|
|
|
|
* @media: an #SDPMedia
|
|
|
|
*
|
|
|
|
* Free all resources allocated by @media. @media should not be used anymore after
|
|
|
|
* this function. This function should be used when @media was dynamically
|
|
|
|
* allocated with sdp_media_new().
|
|
|
|
*
|
|
|
|
* Returns: a #RTSPResult.
|
|
|
|
*/
|
|
|
|
RTSPResult
|
|
|
|
sdp_media_free (SDPMedia * media)
|
|
|
|
{
|
|
|
|
g_return_val_if_fail (media != NULL, RTSP_EINVAL);
|
|
|
|
|
|
|
|
sdp_media_uninit (media);
|
|
|
|
g_free (media);
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFINE_STRING_SETTER (version);
|
|
|
|
DEFINE_STRING_GETTER (version);
|
|
|
|
|
|
|
|
RTSPResult
|
|
|
|
sdp_message_set_origin (SDPMessage * msg, gchar * username, gchar * sess_id,
|
|
|
|
gchar * sess_version, gchar * nettype, gchar * addrtype, gchar * addr)
|
|
|
|
{
|
|
|
|
REPLACE_STRING (msg->origin.username, username);
|
|
|
|
REPLACE_STRING (msg->origin.sess_id, sess_id);
|
|
|
|
REPLACE_STRING (msg->origin.sess_version, sess_version);
|
|
|
|
REPLACE_STRING (msg->origin.nettype, nettype);
|
|
|
|
REPLACE_STRING (msg->origin.addrtype, addrtype);
|
|
|
|
REPLACE_STRING (msg->origin.addr, addr);
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
SDPOrigin *
|
|
|
|
sdp_message_get_origin (SDPMessage * msg)
|
|
|
|
{
|
|
|
|
return &msg->origin;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFINE_STRING_SETTER (session_name);
|
|
|
|
DEFINE_STRING_GETTER (session_name);
|
|
|
|
DEFINE_STRING_SETTER (information);
|
|
|
|
DEFINE_STRING_GETTER (information);
|
|
|
|
DEFINE_STRING_SETTER (uri);
|
|
|
|
DEFINE_STRING_GETTER (uri);
|
|
|
|
|
|
|
|
DEFINE_ARRAY_LEN (emails);
|
|
|
|
DEFINE_ARRAY_GETTER (email, emails, gchar *);
|
|
|
|
DEFINE_ARRAY_ADDER (email, emails, gchar *, g_strdup);
|
|
|
|
|
|
|
|
DEFINE_ARRAY_LEN (phones);
|
|
|
|
DEFINE_ARRAY_GETTER (phone, phones, gchar *);
|
|
|
|
DEFINE_ARRAY_ADDER (phone, phones, gchar *, g_strdup);
|
|
|
|
|
|
|
|
RTSPResult
|
|
|
|
sdp_message_set_connection (SDPMessage * msg, gchar * nettype, gchar * addrtype,
|
|
|
|
gchar * address, gint ttl, gint addr_number)
|
|
|
|
{
|
|
|
|
REPLACE_STRING (msg->connection.nettype, nettype);
|
|
|
|
REPLACE_STRING (msg->connection.addrtype, addrtype);
|
|
|
|
REPLACE_STRING (msg->connection.address, address);
|
|
|
|
msg->connection.ttl = ttl;
|
|
|
|
msg->connection.addr_number = addr_number;
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
SDPConnection *
|
|
|
|
sdp_message_get_connection (SDPMessage * msg)
|
|
|
|
{
|
|
|
|
return &msg->connection;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFINE_ARRAY_LEN (bandwidths);
|
|
|
|
DEFINE_ARRAY_P_GETTER (bandwidth, bandwidths, SDPBandwidth);
|
|
|
|
|
|
|
|
RTSPResult
|
|
|
|
sdp_message_add_bandwidth (SDPMessage * msg, gchar * bwtype, gint bandwidth)
|
|
|
|
{
|
|
|
|
SDPBandwidth bw;
|
|
|
|
|
|
|
|
bw.bwtype = g_strdup (bwtype);
|
|
|
|
bw.bandwidth = bandwidth;
|
|
|
|
|
|
|
|
g_array_append_val (msg->bandwidths, bw);
|
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFINE_ARRAY_LEN (times);
|
|
|
|
DEFINE_ARRAY_P_GETTER (time, times, SDPTime);
|
|
|
|
|
|
|
|
RTSPResult
|
|
|
|
sdp_message_add_time (SDPMessage * msg, gchar * time)
|
|
|
|
{
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFINE_ARRAY_LEN (zones);
|
|
|
|
DEFINE_ARRAY_P_GETTER (zone, zones, SDPZone);
|
|
|
|
RTSPResult
|
|
|
|
sdp_message_add_zone (SDPMessage * msg, gchar * time, gchar * typed_time)
|
|
|
|
{
|
|
|
|
SDPZone zone;
|
|
|
|
|
|
|
|
zone.time = g_strdup (time);
|
|
|
|
zone.typed_time = g_strdup (typed_time);
|
|
|
|
|
|
|
|
g_array_append_val (msg->zones, zone);
|
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
RTSPResult
|
|
|
|
sdp_message_set_key (SDPMessage * msg, gchar * type, gchar * data)
|
|
|
|
{
|
|
|
|
REPLACE_STRING (msg->key.type, type);
|
|
|
|
REPLACE_STRING (msg->key.data, data);
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
SDPKey *
|
|
|
|
sdp_message_get_key (SDPMessage * msg)
|
|
|
|
{
|
|
|
|
return &msg->key;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DEFINE_ARRAY_LEN (attributes);
|
|
|
|
DEFINE_ARRAY_P_GETTER (attribute, attributes, SDPAttribute);
|
|
|
|
gchar *
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
sdp_message_get_attribute_val_n (SDPMessage * msg, gchar * key, guint nth)
|
2005-05-11 07:44:44 +00:00
|
|
|
{
|
gst/rtsp/: Allow url to be NULL to be able to use it for server connections.
Original commit message from CVS:
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtsp/COPYING.MIT:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free), (gst_rtspsrc_cleanup),
(gst_rtspsrc_alloc_udp_ports), (pad_unblocked), (pad_blocked),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_activate_streams), (gst_rtspsrc_loop_interleaved),
(gst_rtspsrc_loop_udp), (gst_rtspsrc_send),
(gst_rtspsrc_parse_methods),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_prepare_transports), (gst_rtspsrc_setup_streams),
(gst_rtspsrc_open), (gst_rtspsrc_close):
* gst/rtsp/gstrtspsrc.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_send), (read_line),
(parse_request_line), (parse_line), (rtsp_connection_read),
(rtsp_connection_close):
* gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_strresult),
(rtsp_method_as_text), (rtsp_header_as_text),
(rtsp_status_as_text), (rtsp_find_header_field),
(rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspextwms.c: (rtsp_ext_wms_after_send),
(rtsp_ext_wms_configure_stream):
* gst/rtsp/rtspmessage.c: (rtsp_message_new), (rtsp_message_init),
(rtsp_message_new_request), (rtsp_message_init_request),
(rtsp_message_new_response), (rtsp_message_init_response),
(rtsp_message_init_data), (rtsp_message_unset),
(rtsp_message_free), (rtsp_message_add_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_get_body), (dump_mem), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_media_get_attribute_val_n), (read_string), (read_string_del),
(sdp_parse_line), (sdp_message_parse_buffer), (print_media),
(sdp_message_dump):
Allow url to be NULL to be able to use it for server connections.
Can now send responses as well as requests.
No longer hangs in an endless loop if EOF is received.
Can now convert a status code to a text string.
Return RTSP_HDR_INVALID for unknown headers.
Return RTSP_INVALID for unknown methods.
Copy CSeq and Session headers from the request.
Only free memory corresponding to the currently set message type.
Added const to function arguments as appropriate.
Avoid a compiler warning when initializing nmedia.
Use guint rather than gint to avoid compiler warnings.
Fix crasher in wms extension.
Factor out stream setup from open_connection.
Delay activation of streams when actual data is received from the
server, this prepares us to do proper protocol switching.
Added new license.
Fixes #380895.
2007-01-10 15:19:48 +00:00
|
|
|
guint i;
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
for (i = 0; i < msg->attributes->len; i++) {
|
|
|
|
SDPAttribute *attr;
|
|
|
|
|
|
|
|
attr = &g_array_index (msg->attributes, SDPAttribute, i);
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
if (!strcmp (attr->key, key)) {
|
|
|
|
if (nth == 0)
|
|
|
|
return attr->value;
|
|
|
|
else
|
|
|
|
nth--;
|
|
|
|
}
|
2005-05-11 07:44:44 +00:00
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
gchar *
|
|
|
|
sdp_message_get_attribute_val (SDPMessage * msg, gchar * key)
|
|
|
|
{
|
|
|
|
return sdp_message_get_attribute_val_n (msg, key, 0);
|
|
|
|
}
|
|
|
|
|
2005-05-11 07:44:44 +00:00
|
|
|
RTSPResult
|
|
|
|
sdp_message_add_attribute (SDPMessage * msg, gchar * key, gchar * value)
|
|
|
|
{
|
|
|
|
SDPAttribute attr;
|
|
|
|
|
|
|
|
attr.key = g_strdup (key);
|
|
|
|
attr.value = g_strdup (value);
|
|
|
|
|
|
|
|
g_array_append_val (msg->attributes, attr);
|
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFINE_ARRAY_LEN (medias);
|
|
|
|
DEFINE_ARRAY_P_GETTER (media, medias, SDPMedia);
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* sdp_message_add_media:
|
|
|
|
* @msg: an #SDPMessage
|
|
|
|
* @media: an #SDPMedia to add
|
|
|
|
*
|
|
|
|
* Adds @media to the array of medias in @msg. This function takes ownership of
|
|
|
|
* the contents of @media so that @media will have to be reinitialized with
|
|
|
|
* gst_media_init() before it can be used again.
|
|
|
|
*
|
|
|
|
* Returns: an #RTSPResult.
|
|
|
|
*/
|
2005-05-11 07:44:44 +00:00
|
|
|
RTSPResult
|
|
|
|
sdp_message_add_media (SDPMessage * msg, SDPMedia * media)
|
|
|
|
{
|
|
|
|
gint len;
|
|
|
|
SDPMedia *nmedia;
|
|
|
|
|
|
|
|
len = msg->medias->len;
|
|
|
|
g_array_set_size (msg->medias, len + 1);
|
|
|
|
nmedia = &g_array_index (msg->medias, SDPMedia, len);
|
|
|
|
|
|
|
|
memcpy (nmedia, media, sizeof (SDPMedia));
|
gst/rtsp/sdpmessage.*: Fix memory management of SDP messages. Fixes #407793.
Original commit message from CVS:
* gst/rtsp/sdpmessage.c: (sdp_origin_init), (sdp_connection_init),
(sdp_bandwidth_init), (sdp_time_init), (sdp_zone_init),
(sdp_key_init), (sdp_attribute_init), (sdp_message_init),
(sdp_message_uninit), (sdp_message_free), (sdp_media_init),
(sdp_media_uninit), (sdp_media_free), (sdp_message_add_media),
(sdp_parse_line):
* gst/rtsp/sdpmessage.h:
Based on patch by: jp.liu <jp_liu at astrocom dot cn>
Fix memory management of SDP messages. Fixes #407793.
2007-02-14 15:24:50 +00:00
|
|
|
memset (media, 0, sizeof (SDPMedia));
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* media access */
|
|
|
|
|
|
|
|
RTSPResult
|
|
|
|
sdp_media_add_attribute (SDPMedia * media, gchar * key, gchar * value)
|
|
|
|
{
|
|
|
|
SDPAttribute attr;
|
|
|
|
|
|
|
|
attr.key = g_strdup (key);
|
|
|
|
attr.value = g_strdup (value);
|
|
|
|
|
|
|
|
g_array_append_val (media->attributes, attr);
|
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
RTSPResult
|
|
|
|
sdp_media_add_bandwidth (SDPMedia * media, gchar * bwtype, gint bandwidth)
|
|
|
|
{
|
|
|
|
SDPBandwidth bw;
|
|
|
|
|
|
|
|
bw.bwtype = g_strdup (bwtype);
|
|
|
|
bw.bandwidth = bandwidth;
|
|
|
|
|
|
|
|
g_array_append_val (media->bandwidths, bw);
|
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
RTSPResult
|
|
|
|
sdp_media_add_format (SDPMedia * media, gchar * format)
|
|
|
|
{
|
|
|
|
gchar *fmt;
|
|
|
|
|
|
|
|
fmt = g_strdup (format);
|
|
|
|
|
|
|
|
g_array_append_val (media->fmts, fmt);
|
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
SDPAttribute *
|
|
|
|
sdp_media_get_attribute (SDPMedia * media, guint idx)
|
|
|
|
{
|
|
|
|
return &g_array_index (media->attributes, SDPAttribute, idx);
|
|
|
|
}
|
|
|
|
|
2005-05-11 07:44:44 +00:00
|
|
|
gchar *
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
sdp_media_get_attribute_val_n (SDPMedia * media, gchar * key, guint nth)
|
2005-05-11 07:44:44 +00:00
|
|
|
{
|
gst/rtsp/: Allow url to be NULL to be able to use it for server connections.
Original commit message from CVS:
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtsp/COPYING.MIT:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free), (gst_rtspsrc_cleanup),
(gst_rtspsrc_alloc_udp_ports), (pad_unblocked), (pad_blocked),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_activate_streams), (gst_rtspsrc_loop_interleaved),
(gst_rtspsrc_loop_udp), (gst_rtspsrc_send),
(gst_rtspsrc_parse_methods),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_prepare_transports), (gst_rtspsrc_setup_streams),
(gst_rtspsrc_open), (gst_rtspsrc_close):
* gst/rtsp/gstrtspsrc.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_send), (read_line),
(parse_request_line), (parse_line), (rtsp_connection_read),
(rtsp_connection_close):
* gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_strresult),
(rtsp_method_as_text), (rtsp_header_as_text),
(rtsp_status_as_text), (rtsp_find_header_field),
(rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspextwms.c: (rtsp_ext_wms_after_send),
(rtsp_ext_wms_configure_stream):
* gst/rtsp/rtspmessage.c: (rtsp_message_new), (rtsp_message_init),
(rtsp_message_new_request), (rtsp_message_init_request),
(rtsp_message_new_response), (rtsp_message_init_response),
(rtsp_message_init_data), (rtsp_message_unset),
(rtsp_message_free), (rtsp_message_add_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_get_body), (dump_mem), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_media_get_attribute_val_n), (read_string), (read_string_del),
(sdp_parse_line), (sdp_message_parse_buffer), (print_media),
(sdp_message_dump):
Allow url to be NULL to be able to use it for server connections.
Can now send responses as well as requests.
No longer hangs in an endless loop if EOF is received.
Can now convert a status code to a text string.
Return RTSP_HDR_INVALID for unknown headers.
Return RTSP_INVALID for unknown methods.
Copy CSeq and Session headers from the request.
Only free memory corresponding to the currently set message type.
Added const to function arguments as appropriate.
Avoid a compiler warning when initializing nmedia.
Use guint rather than gint to avoid compiler warnings.
Fix crasher in wms extension.
Factor out stream setup from open_connection.
Delay activation of streams when actual data is received from the
server, this prepares us to do proper protocol switching.
Added new license.
Fixes #380895.
2007-01-10 15:19:48 +00:00
|
|
|
guint i;
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
for (i = 0; i < media->attributes->len; i++) {
|
|
|
|
SDPAttribute *attr;
|
|
|
|
|
|
|
|
attr = &g_array_index (media->attributes, SDPAttribute, i);
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
if (!strcmp (attr->key, key)) {
|
|
|
|
if (nth == 0)
|
|
|
|
return attr->value;
|
|
|
|
else
|
|
|
|
nth--;
|
|
|
|
}
|
2005-05-11 07:44:44 +00:00
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
gst/rtsp/: Add URI handler.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_get_type),
(gst_rtspsrc_parse_rtpmap), (gst_rtspsrc_media_to_caps),
(gst_rtspsrc_stream_setup_rtp), (gst_rtspsrc_send),
(gst_rtspsrc_open), (gst_rtspsrc_uri_get_type),
(gst_rtspsrc_uri_get_protocols), (gst_rtspsrc_uri_get_uri),
(gst_rtspsrc_uri_set_uri), (gst_rtspsrc_uri_handler_init):
* gst/rtsp/sdpmessage.c: (sdp_media_get_format):
* gst/rtsp/sdpmessage.h:
Add URI handler.
Parse SDP and create caps.
2005-09-20 17:35:11 +00:00
|
|
|
gchar *
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
sdp_media_get_attribute_val (SDPMedia * media, gchar * key)
|
|
|
|
{
|
|
|
|
return sdp_media_get_attribute_val_n (media, key, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
gchar *
|
|
|
|
sdp_media_get_format (SDPMedia * media, guint idx)
|
gst/rtsp/: Add URI handler.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_get_type),
(gst_rtspsrc_parse_rtpmap), (gst_rtspsrc_media_to_caps),
(gst_rtspsrc_stream_setup_rtp), (gst_rtspsrc_send),
(gst_rtspsrc_open), (gst_rtspsrc_uri_get_type),
(gst_rtspsrc_uri_get_protocols), (gst_rtspsrc_uri_get_uri),
(gst_rtspsrc_uri_set_uri), (gst_rtspsrc_uri_handler_init):
* gst/rtsp/sdpmessage.c: (sdp_media_get_format):
* gst/rtsp/sdpmessage.h:
Add URI handler.
Parse SDP and create caps.
2005-09-20 17:35:11 +00:00
|
|
|
{
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
if (idx >= media->fmts->len)
|
gst/rtsp/: Add URI handler.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_get_type),
(gst_rtspsrc_parse_rtpmap), (gst_rtspsrc_media_to_caps),
(gst_rtspsrc_stream_setup_rtp), (gst_rtspsrc_send),
(gst_rtspsrc_open), (gst_rtspsrc_uri_get_type),
(gst_rtspsrc_uri_get_protocols), (gst_rtspsrc_uri_get_uri),
(gst_rtspsrc_uri_set_uri), (gst_rtspsrc_uri_handler_init):
* gst/rtsp/sdpmessage.c: (sdp_media_get_format):
* gst/rtsp/sdpmessage.h:
Add URI handler.
Parse SDP and create caps.
2005-09-20 17:35:11 +00:00
|
|
|
return NULL;
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
return g_array_index (media->fmts, gchar *, idx);
|
gst/rtsp/: Add URI handler.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_get_type),
(gst_rtspsrc_parse_rtpmap), (gst_rtspsrc_media_to_caps),
(gst_rtspsrc_stream_setup_rtp), (gst_rtspsrc_send),
(gst_rtspsrc_open), (gst_rtspsrc_uri_get_type),
(gst_rtspsrc_uri_get_protocols), (gst_rtspsrc_uri_get_uri),
(gst_rtspsrc_uri_set_uri), (gst_rtspsrc_uri_handler_init):
* gst/rtsp/sdpmessage.c: (sdp_media_get_format):
* gst/rtsp/sdpmessage.h:
Add URI handler.
Parse SDP and create caps.
2005-09-20 17:35:11 +00:00
|
|
|
}
|
|
|
|
|
2005-05-11 07:44:44 +00:00
|
|
|
static void
|
gst/rtsp/: Allow url to be NULL to be able to use it for server connections.
Original commit message from CVS:
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtsp/COPYING.MIT:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free), (gst_rtspsrc_cleanup),
(gst_rtspsrc_alloc_udp_ports), (pad_unblocked), (pad_blocked),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_activate_streams), (gst_rtspsrc_loop_interleaved),
(gst_rtspsrc_loop_udp), (gst_rtspsrc_send),
(gst_rtspsrc_parse_methods),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_prepare_transports), (gst_rtspsrc_setup_streams),
(gst_rtspsrc_open), (gst_rtspsrc_close):
* gst/rtsp/gstrtspsrc.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_send), (read_line),
(parse_request_line), (parse_line), (rtsp_connection_read),
(rtsp_connection_close):
* gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_strresult),
(rtsp_method_as_text), (rtsp_header_as_text),
(rtsp_status_as_text), (rtsp_find_header_field),
(rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspextwms.c: (rtsp_ext_wms_after_send),
(rtsp_ext_wms_configure_stream):
* gst/rtsp/rtspmessage.c: (rtsp_message_new), (rtsp_message_init),
(rtsp_message_new_request), (rtsp_message_init_request),
(rtsp_message_new_response), (rtsp_message_init_response),
(rtsp_message_init_data), (rtsp_message_unset),
(rtsp_message_free), (rtsp_message_add_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_get_body), (dump_mem), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_media_get_attribute_val_n), (read_string), (read_string_del),
(sdp_parse_line), (sdp_message_parse_buffer), (print_media),
(sdp_message_dump):
Allow url to be NULL to be able to use it for server connections.
Can now send responses as well as requests.
No longer hangs in an endless loop if EOF is received.
Can now convert a status code to a text string.
Return RTSP_HDR_INVALID for unknown headers.
Return RTSP_INVALID for unknown methods.
Copy CSeq and Session headers from the request.
Only free memory corresponding to the currently set message type.
Added const to function arguments as appropriate.
Avoid a compiler warning when initializing nmedia.
Use guint rather than gint to avoid compiler warnings.
Fix crasher in wms extension.
Factor out stream setup from open_connection.
Delay activation of streams when actual data is received from the
server, this prepares us to do proper protocol switching.
Added new license.
Fixes #380895.
2007-01-10 15:19:48 +00:00
|
|
|
read_string (gchar * dest, guint size, gchar ** src)
|
2005-05-11 07:44:44 +00:00
|
|
|
{
|
gst/rtsp/: Allow url to be NULL to be able to use it for server connections.
Original commit message from CVS:
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtsp/COPYING.MIT:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free), (gst_rtspsrc_cleanup),
(gst_rtspsrc_alloc_udp_ports), (pad_unblocked), (pad_blocked),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_activate_streams), (gst_rtspsrc_loop_interleaved),
(gst_rtspsrc_loop_udp), (gst_rtspsrc_send),
(gst_rtspsrc_parse_methods),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_prepare_transports), (gst_rtspsrc_setup_streams),
(gst_rtspsrc_open), (gst_rtspsrc_close):
* gst/rtsp/gstrtspsrc.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_send), (read_line),
(parse_request_line), (parse_line), (rtsp_connection_read),
(rtsp_connection_close):
* gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_strresult),
(rtsp_method_as_text), (rtsp_header_as_text),
(rtsp_status_as_text), (rtsp_find_header_field),
(rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspextwms.c: (rtsp_ext_wms_after_send),
(rtsp_ext_wms_configure_stream):
* gst/rtsp/rtspmessage.c: (rtsp_message_new), (rtsp_message_init),
(rtsp_message_new_request), (rtsp_message_init_request),
(rtsp_message_new_response), (rtsp_message_init_response),
(rtsp_message_init_data), (rtsp_message_unset),
(rtsp_message_free), (rtsp_message_add_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_get_body), (dump_mem), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_media_get_attribute_val_n), (read_string), (read_string_del),
(sdp_parse_line), (sdp_message_parse_buffer), (print_media),
(sdp_message_dump):
Allow url to be NULL to be able to use it for server connections.
Can now send responses as well as requests.
No longer hangs in an endless loop if EOF is received.
Can now convert a status code to a text string.
Return RTSP_HDR_INVALID for unknown headers.
Return RTSP_INVALID for unknown methods.
Copy CSeq and Session headers from the request.
Only free memory corresponding to the currently set message type.
Added const to function arguments as appropriate.
Avoid a compiler warning when initializing nmedia.
Use guint rather than gint to avoid compiler warnings.
Fix crasher in wms extension.
Factor out stream setup from open_connection.
Delay activation of streams when actual data is received from the
server, this prepares us to do proper protocol switching.
Added new license.
Fixes #380895.
2007-01-10 15:19:48 +00:00
|
|
|
guint idx;
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
idx = 0;
|
|
|
|
/* skip spaces */
|
|
|
|
while (g_ascii_isspace (**src))
|
|
|
|
(*src)++;
|
|
|
|
|
|
|
|
while (!g_ascii_isspace (**src) && **src != '\0') {
|
|
|
|
if (idx < size - 1)
|
|
|
|
dest[idx++] = **src;
|
|
|
|
(*src)++;
|
|
|
|
}
|
|
|
|
if (size > 0)
|
|
|
|
dest[idx] = '\0';
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
gst/rtsp/: Allow url to be NULL to be able to use it for server connections.
Original commit message from CVS:
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtsp/COPYING.MIT:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free), (gst_rtspsrc_cleanup),
(gst_rtspsrc_alloc_udp_ports), (pad_unblocked), (pad_blocked),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_activate_streams), (gst_rtspsrc_loop_interleaved),
(gst_rtspsrc_loop_udp), (gst_rtspsrc_send),
(gst_rtspsrc_parse_methods),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_prepare_transports), (gst_rtspsrc_setup_streams),
(gst_rtspsrc_open), (gst_rtspsrc_close):
* gst/rtsp/gstrtspsrc.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_send), (read_line),
(parse_request_line), (parse_line), (rtsp_connection_read),
(rtsp_connection_close):
* gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_strresult),
(rtsp_method_as_text), (rtsp_header_as_text),
(rtsp_status_as_text), (rtsp_find_header_field),
(rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspextwms.c: (rtsp_ext_wms_after_send),
(rtsp_ext_wms_configure_stream):
* gst/rtsp/rtspmessage.c: (rtsp_message_new), (rtsp_message_init),
(rtsp_message_new_request), (rtsp_message_init_request),
(rtsp_message_new_response), (rtsp_message_init_response),
(rtsp_message_init_data), (rtsp_message_unset),
(rtsp_message_free), (rtsp_message_add_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_get_body), (dump_mem), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_media_get_attribute_val_n), (read_string), (read_string_del),
(sdp_parse_line), (sdp_message_parse_buffer), (print_media),
(sdp_message_dump):
Allow url to be NULL to be able to use it for server connections.
Can now send responses as well as requests.
No longer hangs in an endless loop if EOF is received.
Can now convert a status code to a text string.
Return RTSP_HDR_INVALID for unknown headers.
Return RTSP_INVALID for unknown methods.
Copy CSeq and Session headers from the request.
Only free memory corresponding to the currently set message type.
Added const to function arguments as appropriate.
Avoid a compiler warning when initializing nmedia.
Use guint rather than gint to avoid compiler warnings.
Fix crasher in wms extension.
Factor out stream setup from open_connection.
Delay activation of streams when actual data is received from the
server, this prepares us to do proper protocol switching.
Added new license.
Fixes #380895.
2007-01-10 15:19:48 +00:00
|
|
|
read_string_del (gchar * dest, guint size, gchar del, gchar ** src)
|
2005-05-11 07:44:44 +00:00
|
|
|
{
|
gst/rtsp/: Allow url to be NULL to be able to use it for server connections.
Original commit message from CVS:
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtsp/COPYING.MIT:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free), (gst_rtspsrc_cleanup),
(gst_rtspsrc_alloc_udp_ports), (pad_unblocked), (pad_blocked),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_activate_streams), (gst_rtspsrc_loop_interleaved),
(gst_rtspsrc_loop_udp), (gst_rtspsrc_send),
(gst_rtspsrc_parse_methods),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_prepare_transports), (gst_rtspsrc_setup_streams),
(gst_rtspsrc_open), (gst_rtspsrc_close):
* gst/rtsp/gstrtspsrc.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_send), (read_line),
(parse_request_line), (parse_line), (rtsp_connection_read),
(rtsp_connection_close):
* gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_strresult),
(rtsp_method_as_text), (rtsp_header_as_text),
(rtsp_status_as_text), (rtsp_find_header_field),
(rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspextwms.c: (rtsp_ext_wms_after_send),
(rtsp_ext_wms_configure_stream):
* gst/rtsp/rtspmessage.c: (rtsp_message_new), (rtsp_message_init),
(rtsp_message_new_request), (rtsp_message_init_request),
(rtsp_message_new_response), (rtsp_message_init_response),
(rtsp_message_init_data), (rtsp_message_unset),
(rtsp_message_free), (rtsp_message_add_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_get_body), (dump_mem), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_media_get_attribute_val_n), (read_string), (read_string_del),
(sdp_parse_line), (sdp_message_parse_buffer), (print_media),
(sdp_message_dump):
Allow url to be NULL to be able to use it for server connections.
Can now send responses as well as requests.
No longer hangs in an endless loop if EOF is received.
Can now convert a status code to a text string.
Return RTSP_HDR_INVALID for unknown headers.
Return RTSP_INVALID for unknown methods.
Copy CSeq and Session headers from the request.
Only free memory corresponding to the currently set message type.
Added const to function arguments as appropriate.
Avoid a compiler warning when initializing nmedia.
Use guint rather than gint to avoid compiler warnings.
Fix crasher in wms extension.
Factor out stream setup from open_connection.
Delay activation of streams when actual data is received from the
server, this prepares us to do proper protocol switching.
Added new license.
Fixes #380895.
2007-01-10 15:19:48 +00:00
|
|
|
guint idx;
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
idx = 0;
|
|
|
|
/* skip spaces */
|
|
|
|
while (g_ascii_isspace (**src))
|
|
|
|
(*src)++;
|
|
|
|
|
|
|
|
while (**src != del && **src != '\0') {
|
|
|
|
if (idx < size - 1)
|
|
|
|
dest[idx++] = **src;
|
|
|
|
(*src)++;
|
|
|
|
}
|
|
|
|
if (size > 0)
|
|
|
|
dest[idx] = '\0';
|
|
|
|
}
|
|
|
|
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
SDP_SESSION,
|
|
|
|
SDP_MEDIA,
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
gint state;
|
|
|
|
SDPMessage *msg;
|
|
|
|
SDPMedia *media;
|
|
|
|
} SDPContext;
|
|
|
|
|
|
|
|
static gboolean
|
2005-06-29 16:27:27 +00:00
|
|
|
sdp_parse_line (SDPContext * c, gchar type, gchar * buffer)
|
2005-05-11 07:44:44 +00:00
|
|
|
{
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
gchar str[8192];
|
2005-05-11 07:44:44 +00:00
|
|
|
gchar *p = buffer;
|
|
|
|
|
|
|
|
#define READ_STRING(field) read_string (str, sizeof(str), &p);REPLACE_STRING (field, str);
|
|
|
|
#define READ_INT(field) read_string (str, sizeof(str), &p);field = atoi(str);
|
|
|
|
|
|
|
|
switch (type) {
|
|
|
|
case 'v':
|
|
|
|
if (buffer[0] != '0')
|
gst/rtsp/: Added README
Original commit message from CVS:
* gst/rtsp/README:
* gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
(gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
(gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
(gst_rtspsrc_stream_setup_rtp),
(gst_rtspsrc_stream_configure_transport), (find_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play):
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_send), (read_line), (parse_request_line),
(parse_line), (read_body), (rtsp_connection_receive),
(rtsp_connection_free):
* gst/rtsp/rtspconnection.h:
* gst/rtsp/rtspdefs.c: (rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspmessage.c: (rtsp_message_set_body),
(rtsp_message_take_body):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtspstream.h:
* gst/rtsp/sdpmessage.c: (sdp_parse_line):
Added README
Some cleanups.
2005-05-11 12:01:10 +00:00
|
|
|
g_warning ("wrong SDP version");
|
2005-05-11 07:44:44 +00:00
|
|
|
sdp_message_set_version (c->msg, buffer);
|
|
|
|
break;
|
|
|
|
case 'o':
|
|
|
|
READ_STRING (c->msg->origin.username);
|
|
|
|
READ_STRING (c->msg->origin.sess_id);
|
|
|
|
READ_STRING (c->msg->origin.sess_version);
|
|
|
|
READ_STRING (c->msg->origin.nettype);
|
|
|
|
READ_STRING (c->msg->origin.addrtype);
|
|
|
|
READ_STRING (c->msg->origin.addr);
|
|
|
|
break;
|
|
|
|
case 's':
|
|
|
|
REPLACE_STRING (c->msg->session_name, buffer);
|
|
|
|
break;
|
|
|
|
case 'i':
|
|
|
|
if (c->state == SDP_SESSION) {
|
|
|
|
REPLACE_STRING (c->msg->information, buffer);
|
|
|
|
} else {
|
|
|
|
REPLACE_STRING (c->media->information, buffer);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 'u':
|
|
|
|
REPLACE_STRING (c->msg->uri, buffer);
|
|
|
|
break;
|
|
|
|
case 'e':
|
|
|
|
sdp_message_add_email (c->msg, buffer);
|
|
|
|
break;
|
|
|
|
case 'p':
|
|
|
|
sdp_message_add_phone (c->msg, buffer);
|
|
|
|
break;
|
|
|
|
case 'c':
|
|
|
|
READ_STRING (c->msg->connection.nettype);
|
|
|
|
READ_STRING (c->msg->connection.addrtype);
|
|
|
|
READ_STRING (c->msg->connection.address);
|
|
|
|
READ_INT (c->msg->connection.ttl);
|
|
|
|
READ_INT (c->msg->connection.addr_number);
|
|
|
|
break;
|
|
|
|
case 'b':
|
|
|
|
{
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
gchar str2[MAX_LINE_LEN];
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
read_string_del (str, sizeof (str), ':', &p);
|
|
|
|
read_string (str2, sizeof (str2), &p);
|
|
|
|
if (c->state == SDP_SESSION)
|
|
|
|
sdp_message_add_bandwidth (c->msg, str, atoi (str2));
|
|
|
|
else
|
|
|
|
sdp_media_add_bandwidth (c->media, str, atoi (str2));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 't':
|
|
|
|
break;
|
|
|
|
case 'k':
|
|
|
|
|
|
|
|
break;
|
|
|
|
case 'a':
|
|
|
|
read_string_del (str, sizeof (str), ':', &p);
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
if (*p != '\0')
|
2005-05-11 07:44:44 +00:00
|
|
|
p++;
|
|
|
|
if (c->state == SDP_SESSION)
|
|
|
|
sdp_message_add_attribute (c->msg, str, p);
|
|
|
|
else
|
|
|
|
sdp_media_add_attribute (c->media, str, p);
|
|
|
|
break;
|
|
|
|
case 'm':
|
|
|
|
{
|
|
|
|
gchar *slash;
|
2007-02-11 12:57:47 +00:00
|
|
|
SDPMedia nmedia;
|
|
|
|
|
2005-05-11 07:44:44 +00:00
|
|
|
c->state = SDP_MEDIA;
|
2007-02-14 17:04:47 +00:00
|
|
|
memset (&nmedia, 0, sizeof (nmedia));
|
2005-05-11 07:44:44 +00:00
|
|
|
sdp_media_init (&nmedia);
|
|
|
|
|
|
|
|
READ_STRING (nmedia.media);
|
|
|
|
read_string (str, sizeof (str), &p);
|
|
|
|
slash = g_strrstr (str, "/");
|
|
|
|
if (slash) {
|
|
|
|
*slash = '\0';
|
|
|
|
nmedia.port = atoi (str);
|
|
|
|
nmedia.num_ports = atoi (slash + 1);
|
|
|
|
} else {
|
|
|
|
nmedia.port = atoi (str);
|
|
|
|
nmedia.num_ports = -1;
|
|
|
|
}
|
|
|
|
READ_STRING (nmedia.proto);
|
|
|
|
do {
|
|
|
|
read_string (str, sizeof (str), &p);
|
|
|
|
sdp_media_add_format (&nmedia, str);
|
|
|
|
} while (*p != '\0');
|
|
|
|
|
|
|
|
sdp_message_add_media (c->msg, &nmedia);
|
|
|
|
c->media =
|
|
|
|
&g_array_index (c->msg->medias, SDPMedia, c->msg->medias->len - 1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
RTSPResult
|
|
|
|
sdp_message_parse_buffer (guint8 * data, guint size, SDPMessage * msg)
|
|
|
|
{
|
|
|
|
gchar *p;
|
|
|
|
SDPContext c;
|
|
|
|
gchar type;
|
gst/rtsp/URLS: Added some test URLS.
Original commit message from CVS:
* gst/rtsp/URLS:
Added some test URLS.
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_loop), (gst_rtspsrc_open):
* gst/rtsp/gstrtspsrc.h:
When creating streams, give access to the complete SDP.
Fix some leaks.
Collect and merge global stream properties in stream caps.
Preliminary support for WMServer.
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_read), (read_body),
(rtsp_connection_receive):
* gst/rtsp/rtspconnection.h:
Make connection interruptable.
Refactor to make it reconnectable.
Don't fail on short reads when reading data packets.
* gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_set_port),
(rtsp_url_get_port):
* gst/rtsp/rtspurl.h:
Add methods for getting/setting the port.
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_message_get_attribute_val), (sdp_media_get_attribute),
(sdp_media_get_attribute_val_n), (sdp_media_get_attribute_val),
(sdp_media_get_format), (sdp_parse_line),
(sdp_message_parse_buffer):
Fix headers.
Add methods for getting multiple attributes with the same name.
Increase buffer size when parsing.
Fix parsing of a=foo fields.
* gst/rtsp/test.c: (main):
Update to new connection API.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/rtsptransport.c: (rtsp_transport_free):
* gst/rtsp/rtsptransport.h:
* gst/rtsp/sdp.h:
* gst/rtsp/sdpmessage.h:
* gst/rtsp/gstrtsp.c:
* gst/rtsp/gstrtsp.h:
* gst/rtsp/gstrtpdec.c:
* gst/rtsp/gstrtpdec.h:
* gst/rtsp/rtsp.h:
* gst/rtsp/rtspdefs.c:
* gst/rtsp/rtspdefs.h:
Dual licensed under MIT and LGPL now.
2006-09-20 16:06:27 +00:00
|
|
|
gchar buffer[MAX_LINE_LEN];
|
gst/rtsp/: Allow url to be NULL to be able to use it for server connections.
Original commit message from CVS:
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtsp/COPYING.MIT:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free), (gst_rtspsrc_cleanup),
(gst_rtspsrc_alloc_udp_ports), (pad_unblocked), (pad_blocked),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_activate_streams), (gst_rtspsrc_loop_interleaved),
(gst_rtspsrc_loop_udp), (gst_rtspsrc_send),
(gst_rtspsrc_parse_methods),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_prepare_transports), (gst_rtspsrc_setup_streams),
(gst_rtspsrc_open), (gst_rtspsrc_close):
* gst/rtsp/gstrtspsrc.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_send), (read_line),
(parse_request_line), (parse_line), (rtsp_connection_read),
(rtsp_connection_close):
* gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_strresult),
(rtsp_method_as_text), (rtsp_header_as_text),
(rtsp_status_as_text), (rtsp_find_header_field),
(rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspextwms.c: (rtsp_ext_wms_after_send),
(rtsp_ext_wms_configure_stream):
* gst/rtsp/rtspmessage.c: (rtsp_message_new), (rtsp_message_init),
(rtsp_message_new_request), (rtsp_message_init_request),
(rtsp_message_new_response), (rtsp_message_init_response),
(rtsp_message_init_data), (rtsp_message_unset),
(rtsp_message_free), (rtsp_message_add_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_get_body), (dump_mem), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_media_get_attribute_val_n), (read_string), (read_string_del),
(sdp_parse_line), (sdp_message_parse_buffer), (print_media),
(sdp_message_dump):
Allow url to be NULL to be able to use it for server connections.
Can now send responses as well as requests.
No longer hangs in an endless loop if EOF is received.
Can now convert a status code to a text string.
Return RTSP_HDR_INVALID for unknown headers.
Return RTSP_INVALID for unknown methods.
Copy CSeq and Session headers from the request.
Only free memory corresponding to the currently set message type.
Added const to function arguments as appropriate.
Avoid a compiler warning when initializing nmedia.
Use guint rather than gint to avoid compiler warnings.
Fix crasher in wms extension.
Factor out stream setup from open_connection.
Delay activation of streams when actual data is received from the
server, this prepares us to do proper protocol switching.
Added new license.
Fixes #380895.
2007-01-10 15:19:48 +00:00
|
|
|
guint idx = 0;
|
2005-05-11 07:44:44 +00:00
|
|
|
|
gst/rtsp/gstrtspsrc.*: Small cleanups, added documentation.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_media_to_caps),
(gst_rtspsrc_send), (gst_rtspsrc_parse_methods),
(gst_rtspsrc_open), (gst_rtspsrc_close), (gst_rtspsrc_play),
(gst_rtspsrc_pause), (gst_rtspsrc_change_state),
(gst_rtspsrc_uri_get_uri), (gst_rtspsrc_uri_set_uri):
* gst/rtsp/gstrtspsrc.h:
Small cleanups, added documentation.
Try to clean up the requests and responses.
Refactor parsing the supported methods.
* gst/rtsp/rtspconnection.c: (rtsp_connection_open),
(rtsp_connection_create), (rtsp_connection_send),
(parse_response_status), (parse_request_line),
(rtsp_connection_receive), (rtsp_connection_close),
(rtsp_connection_free):
* gst/rtsp/rtsptransport.c: (rtsp_transport_new),
(rtsp_transport_init), (rtsp_transport_parse),
(rtsp_transport_free):
* gst/rtsp/rtspurl.c: (rtsp_url_parse):
* gst/rtsp/sdpmessage.c: (sdp_message_new), (sdp_message_init),
(sdp_message_clean), (sdp_message_free), (sdp_media_new),
(sdp_media_init), (sdp_message_parse_buffer), (sdp_message_dump):
Use g_return_val some more.
* gst/rtsp/rtspdefs.h:
Add more enum values to track initial states.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_request),
(rtsp_message_init_request), (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free),
(rtsp_message_add_header), (rtsp_message_remove_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_take_body), (rtsp_message_get_body),
(rtsp_message_steal_body), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
Reorder arguments, object goes as the first one.
Use g_return_val some more.
2006-09-18 17:37:46 +00:00
|
|
|
g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
|
|
|
|
g_return_val_if_fail (data != NULL, RTSP_EINVAL);
|
|
|
|
g_return_val_if_fail (size != 0, RTSP_EINVAL);
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
c.state = SDP_SESSION;
|
|
|
|
c.msg = msg;
|
2005-06-29 16:27:27 +00:00
|
|
|
c.media = NULL;
|
2005-05-11 07:44:44 +00:00
|
|
|
|
2005-06-29 16:27:27 +00:00
|
|
|
p = (gchar *) data;
|
2005-05-11 07:44:44 +00:00
|
|
|
while (TRUE) {
|
|
|
|
while (g_ascii_isspace (*p))
|
|
|
|
p++;
|
|
|
|
|
|
|
|
type = *p++;
|
|
|
|
if (type == '\0')
|
|
|
|
break;
|
|
|
|
|
|
|
|
if (*p != '=')
|
|
|
|
goto line_done;
|
|
|
|
p++;
|
|
|
|
|
|
|
|
idx = 0;
|
|
|
|
while (*p != '\n' && *p != '\r' && *p != '\0') {
|
|
|
|
if (idx < sizeof (buffer) - 1)
|
|
|
|
buffer[idx++] = *p;
|
|
|
|
p++;
|
|
|
|
}
|
|
|
|
buffer[idx] = '\0';
|
|
|
|
sdp_parse_line (&c, type, buffer);
|
|
|
|
|
|
|
|
line_done:
|
|
|
|
while (*p != '\n' && *p != '\0')
|
|
|
|
p++;
|
|
|
|
if (*p == '\n')
|
|
|
|
p++;
|
|
|
|
}
|
|
|
|
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
print_media (SDPMedia * media)
|
|
|
|
{
|
|
|
|
g_print (" media: '%s'\n", media->media);
|
|
|
|
g_print (" port: '%d'\n", media->port);
|
|
|
|
g_print (" num_ports: '%d'\n", media->num_ports);
|
|
|
|
g_print (" proto: '%s'\n", media->proto);
|
|
|
|
if (media->fmts->len > 0) {
|
gst/rtsp/: Allow url to be NULL to be able to use it for server connections.
Original commit message from CVS:
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtsp/COPYING.MIT:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free), (gst_rtspsrc_cleanup),
(gst_rtspsrc_alloc_udp_ports), (pad_unblocked), (pad_blocked),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_activate_streams), (gst_rtspsrc_loop_interleaved),
(gst_rtspsrc_loop_udp), (gst_rtspsrc_send),
(gst_rtspsrc_parse_methods),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_prepare_transports), (gst_rtspsrc_setup_streams),
(gst_rtspsrc_open), (gst_rtspsrc_close):
* gst/rtsp/gstrtspsrc.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_send), (read_line),
(parse_request_line), (parse_line), (rtsp_connection_read),
(rtsp_connection_close):
* gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_strresult),
(rtsp_method_as_text), (rtsp_header_as_text),
(rtsp_status_as_text), (rtsp_find_header_field),
(rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspextwms.c: (rtsp_ext_wms_after_send),
(rtsp_ext_wms_configure_stream):
* gst/rtsp/rtspmessage.c: (rtsp_message_new), (rtsp_message_init),
(rtsp_message_new_request), (rtsp_message_init_request),
(rtsp_message_new_response), (rtsp_message_init_response),
(rtsp_message_init_data), (rtsp_message_unset),
(rtsp_message_free), (rtsp_message_add_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_get_body), (dump_mem), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_media_get_attribute_val_n), (read_string), (read_string_del),
(sdp_parse_line), (sdp_message_parse_buffer), (print_media),
(sdp_message_dump):
Allow url to be NULL to be able to use it for server connections.
Can now send responses as well as requests.
No longer hangs in an endless loop if EOF is received.
Can now convert a status code to a text string.
Return RTSP_HDR_INVALID for unknown headers.
Return RTSP_INVALID for unknown methods.
Copy CSeq and Session headers from the request.
Only free memory corresponding to the currently set message type.
Added const to function arguments as appropriate.
Avoid a compiler warning when initializing nmedia.
Use guint rather than gint to avoid compiler warnings.
Fix crasher in wms extension.
Factor out stream setup from open_connection.
Delay activation of streams when actual data is received from the
server, this prepares us to do proper protocol switching.
Added new license.
Fixes #380895.
2007-01-10 15:19:48 +00:00
|
|
|
guint i;
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
g_print (" formats:\n");
|
|
|
|
for (i = 0; i < media->fmts->len; i++) {
|
|
|
|
g_print (" format '%s'\n", g_array_index (media->fmts, gchar *, i));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
g_print (" information: '%s'\n", media->information);
|
|
|
|
g_print (" key:\n");
|
|
|
|
g_print (" type: '%s'\n", media->key.type);
|
|
|
|
g_print (" data: '%s'\n", media->key.data);
|
|
|
|
if (media->attributes->len > 0) {
|
gst/rtsp/: Allow url to be NULL to be able to use it for server connections.
Original commit message from CVS:
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtsp/COPYING.MIT:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free), (gst_rtspsrc_cleanup),
(gst_rtspsrc_alloc_udp_ports), (pad_unblocked), (pad_blocked),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_activate_streams), (gst_rtspsrc_loop_interleaved),
(gst_rtspsrc_loop_udp), (gst_rtspsrc_send),
(gst_rtspsrc_parse_methods),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_prepare_transports), (gst_rtspsrc_setup_streams),
(gst_rtspsrc_open), (gst_rtspsrc_close):
* gst/rtsp/gstrtspsrc.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_send), (read_line),
(parse_request_line), (parse_line), (rtsp_connection_read),
(rtsp_connection_close):
* gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_strresult),
(rtsp_method_as_text), (rtsp_header_as_text),
(rtsp_status_as_text), (rtsp_find_header_field),
(rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspextwms.c: (rtsp_ext_wms_after_send),
(rtsp_ext_wms_configure_stream):
* gst/rtsp/rtspmessage.c: (rtsp_message_new), (rtsp_message_init),
(rtsp_message_new_request), (rtsp_message_init_request),
(rtsp_message_new_response), (rtsp_message_init_response),
(rtsp_message_init_data), (rtsp_message_unset),
(rtsp_message_free), (rtsp_message_add_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_get_body), (dump_mem), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_media_get_attribute_val_n), (read_string), (read_string_del),
(sdp_parse_line), (sdp_message_parse_buffer), (print_media),
(sdp_message_dump):
Allow url to be NULL to be able to use it for server connections.
Can now send responses as well as requests.
No longer hangs in an endless loop if EOF is received.
Can now convert a status code to a text string.
Return RTSP_HDR_INVALID for unknown headers.
Return RTSP_INVALID for unknown methods.
Copy CSeq and Session headers from the request.
Only free memory corresponding to the currently set message type.
Added const to function arguments as appropriate.
Avoid a compiler warning when initializing nmedia.
Use guint rather than gint to avoid compiler warnings.
Fix crasher in wms extension.
Factor out stream setup from open_connection.
Delay activation of streams when actual data is received from the
server, this prepares us to do proper protocol switching.
Added new license.
Fixes #380895.
2007-01-10 15:19:48 +00:00
|
|
|
guint i;
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
g_print (" attributes:\n");
|
|
|
|
for (i = 0; i < media->attributes->len; i++) {
|
|
|
|
SDPAttribute *attr = &g_array_index (media->attributes, SDPAttribute, i);
|
|
|
|
|
|
|
|
g_print (" attribute '%s' : '%s'\n", attr->key, attr->value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
RTSPResult
|
|
|
|
sdp_message_dump (SDPMessage * msg)
|
|
|
|
{
|
gst/rtsp/gstrtspsrc.*: Small cleanups, added documentation.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_media_to_caps),
(gst_rtspsrc_send), (gst_rtspsrc_parse_methods),
(gst_rtspsrc_open), (gst_rtspsrc_close), (gst_rtspsrc_play),
(gst_rtspsrc_pause), (gst_rtspsrc_change_state),
(gst_rtspsrc_uri_get_uri), (gst_rtspsrc_uri_set_uri):
* gst/rtsp/gstrtspsrc.h:
Small cleanups, added documentation.
Try to clean up the requests and responses.
Refactor parsing the supported methods.
* gst/rtsp/rtspconnection.c: (rtsp_connection_open),
(rtsp_connection_create), (rtsp_connection_send),
(parse_response_status), (parse_request_line),
(rtsp_connection_receive), (rtsp_connection_close),
(rtsp_connection_free):
* gst/rtsp/rtsptransport.c: (rtsp_transport_new),
(rtsp_transport_init), (rtsp_transport_parse),
(rtsp_transport_free):
* gst/rtsp/rtspurl.c: (rtsp_url_parse):
* gst/rtsp/sdpmessage.c: (sdp_message_new), (sdp_message_init),
(sdp_message_clean), (sdp_message_free), (sdp_media_new),
(sdp_media_init), (sdp_message_parse_buffer), (sdp_message_dump):
Use g_return_val some more.
* gst/rtsp/rtspdefs.h:
Add more enum values to track initial states.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_request),
(rtsp_message_init_request), (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free),
(rtsp_message_add_header), (rtsp_message_remove_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_take_body), (rtsp_message_get_body),
(rtsp_message_steal_body), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
Reorder arguments, object goes as the first one.
Use g_return_val some more.
2006-09-18 17:37:46 +00:00
|
|
|
g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
g_print ("sdp packet %p:\n", msg);
|
|
|
|
g_print (" version: '%s'\n", msg->version);
|
|
|
|
g_print (" origin:\n");
|
|
|
|
g_print (" username: '%s'\n", msg->origin.username);
|
|
|
|
g_print (" sess_id: '%s'\n", msg->origin.sess_id);
|
|
|
|
g_print (" sess_version: '%s'\n", msg->origin.sess_version);
|
|
|
|
g_print (" nettype: '%s'\n", msg->origin.nettype);
|
|
|
|
g_print (" addrtype: '%s'\n", msg->origin.addrtype);
|
|
|
|
g_print (" addr: '%s'\n", msg->origin.addr);
|
|
|
|
g_print (" session_name: '%s'\n", msg->session_name);
|
|
|
|
g_print (" information: '%s'\n", msg->information);
|
|
|
|
g_print (" uri: '%s'\n", msg->uri);
|
gst/rtsp/gstrtspsrc.*: Small cleanups, added documentation.
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_media_to_caps),
(gst_rtspsrc_send), (gst_rtspsrc_parse_methods),
(gst_rtspsrc_open), (gst_rtspsrc_close), (gst_rtspsrc_play),
(gst_rtspsrc_pause), (gst_rtspsrc_change_state),
(gst_rtspsrc_uri_get_uri), (gst_rtspsrc_uri_set_uri):
* gst/rtsp/gstrtspsrc.h:
Small cleanups, added documentation.
Try to clean up the requests and responses.
Refactor parsing the supported methods.
* gst/rtsp/rtspconnection.c: (rtsp_connection_open),
(rtsp_connection_create), (rtsp_connection_send),
(parse_response_status), (parse_request_line),
(rtsp_connection_receive), (rtsp_connection_close),
(rtsp_connection_free):
* gst/rtsp/rtsptransport.c: (rtsp_transport_new),
(rtsp_transport_init), (rtsp_transport_parse),
(rtsp_transport_free):
* gst/rtsp/rtspurl.c: (rtsp_url_parse):
* gst/rtsp/sdpmessage.c: (sdp_message_new), (sdp_message_init),
(sdp_message_clean), (sdp_message_free), (sdp_media_new),
(sdp_media_init), (sdp_message_parse_buffer), (sdp_message_dump):
Use g_return_val some more.
* gst/rtsp/rtspdefs.h:
Add more enum values to track initial states.
* gst/rtsp/rtspmessage.c: (rtsp_message_new_request),
(rtsp_message_init_request), (rtsp_message_new_response),
(rtsp_message_init_response), (rtsp_message_init_data),
(rtsp_message_unset), (rtsp_message_free),
(rtsp_message_add_header), (rtsp_message_remove_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_take_body), (rtsp_message_get_body),
(rtsp_message_steal_body), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
Reorder arguments, object goes as the first one.
Use g_return_val some more.
2006-09-18 17:37:46 +00:00
|
|
|
|
2005-05-11 07:44:44 +00:00
|
|
|
if (msg->emails->len > 0) {
|
gst/rtsp/: Allow url to be NULL to be able to use it for server connections.
Original commit message from CVS:
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtsp/COPYING.MIT:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free), (gst_rtspsrc_cleanup),
(gst_rtspsrc_alloc_udp_ports), (pad_unblocked), (pad_blocked),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_activate_streams), (gst_rtspsrc_loop_interleaved),
(gst_rtspsrc_loop_udp), (gst_rtspsrc_send),
(gst_rtspsrc_parse_methods),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_prepare_transports), (gst_rtspsrc_setup_streams),
(gst_rtspsrc_open), (gst_rtspsrc_close):
* gst/rtsp/gstrtspsrc.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_send), (read_line),
(parse_request_line), (parse_line), (rtsp_connection_read),
(rtsp_connection_close):
* gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_strresult),
(rtsp_method_as_text), (rtsp_header_as_text),
(rtsp_status_as_text), (rtsp_find_header_field),
(rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspextwms.c: (rtsp_ext_wms_after_send),
(rtsp_ext_wms_configure_stream):
* gst/rtsp/rtspmessage.c: (rtsp_message_new), (rtsp_message_init),
(rtsp_message_new_request), (rtsp_message_init_request),
(rtsp_message_new_response), (rtsp_message_init_response),
(rtsp_message_init_data), (rtsp_message_unset),
(rtsp_message_free), (rtsp_message_add_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_get_body), (dump_mem), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_media_get_attribute_val_n), (read_string), (read_string_del),
(sdp_parse_line), (sdp_message_parse_buffer), (print_media),
(sdp_message_dump):
Allow url to be NULL to be able to use it for server connections.
Can now send responses as well as requests.
No longer hangs in an endless loop if EOF is received.
Can now convert a status code to a text string.
Return RTSP_HDR_INVALID for unknown headers.
Return RTSP_INVALID for unknown methods.
Copy CSeq and Session headers from the request.
Only free memory corresponding to the currently set message type.
Added const to function arguments as appropriate.
Avoid a compiler warning when initializing nmedia.
Use guint rather than gint to avoid compiler warnings.
Fix crasher in wms extension.
Factor out stream setup from open_connection.
Delay activation of streams when actual data is received from the
server, this prepares us to do proper protocol switching.
Added new license.
Fixes #380895.
2007-01-10 15:19:48 +00:00
|
|
|
guint i;
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
g_print (" emails:\n");
|
|
|
|
for (i = 0; i < msg->emails->len; i++) {
|
|
|
|
g_print (" email '%s'\n", g_array_index (msg->emails, gchar *, i));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (msg->phones->len > 0) {
|
gst/rtsp/: Allow url to be NULL to be able to use it for server connections.
Original commit message from CVS:
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtsp/COPYING.MIT:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free), (gst_rtspsrc_cleanup),
(gst_rtspsrc_alloc_udp_ports), (pad_unblocked), (pad_blocked),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_activate_streams), (gst_rtspsrc_loop_interleaved),
(gst_rtspsrc_loop_udp), (gst_rtspsrc_send),
(gst_rtspsrc_parse_methods),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_prepare_transports), (gst_rtspsrc_setup_streams),
(gst_rtspsrc_open), (gst_rtspsrc_close):
* gst/rtsp/gstrtspsrc.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_send), (read_line),
(parse_request_line), (parse_line), (rtsp_connection_read),
(rtsp_connection_close):
* gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_strresult),
(rtsp_method_as_text), (rtsp_header_as_text),
(rtsp_status_as_text), (rtsp_find_header_field),
(rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspextwms.c: (rtsp_ext_wms_after_send),
(rtsp_ext_wms_configure_stream):
* gst/rtsp/rtspmessage.c: (rtsp_message_new), (rtsp_message_init),
(rtsp_message_new_request), (rtsp_message_init_request),
(rtsp_message_new_response), (rtsp_message_init_response),
(rtsp_message_init_data), (rtsp_message_unset),
(rtsp_message_free), (rtsp_message_add_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_get_body), (dump_mem), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_media_get_attribute_val_n), (read_string), (read_string_del),
(sdp_parse_line), (sdp_message_parse_buffer), (print_media),
(sdp_message_dump):
Allow url to be NULL to be able to use it for server connections.
Can now send responses as well as requests.
No longer hangs in an endless loop if EOF is received.
Can now convert a status code to a text string.
Return RTSP_HDR_INVALID for unknown headers.
Return RTSP_INVALID for unknown methods.
Copy CSeq and Session headers from the request.
Only free memory corresponding to the currently set message type.
Added const to function arguments as appropriate.
Avoid a compiler warning when initializing nmedia.
Use guint rather than gint to avoid compiler warnings.
Fix crasher in wms extension.
Factor out stream setup from open_connection.
Delay activation of streams when actual data is received from the
server, this prepares us to do proper protocol switching.
Added new license.
Fixes #380895.
2007-01-10 15:19:48 +00:00
|
|
|
guint i;
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
g_print (" phones:\n");
|
|
|
|
for (i = 0; i < msg->phones->len; i++) {
|
|
|
|
g_print (" phone '%s'\n", g_array_index (msg->phones, gchar *, i));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
g_print (" connection:\n");
|
|
|
|
g_print (" nettype: '%s'\n", msg->connection.nettype);
|
|
|
|
g_print (" addrtype: '%s'\n", msg->connection.addrtype);
|
|
|
|
g_print (" address: '%s'\n", msg->connection.address);
|
|
|
|
g_print (" ttl: '%d'\n", msg->connection.ttl);
|
|
|
|
g_print (" addr_number: '%d'\n", msg->connection.addr_number);
|
|
|
|
g_print (" key:\n");
|
|
|
|
g_print (" type: '%s'\n", msg->key.type);
|
|
|
|
g_print (" data: '%s'\n", msg->key.data);
|
|
|
|
if (msg->attributes->len > 0) {
|
gst/rtsp/: Allow url to be NULL to be able to use it for server connections.
Original commit message from CVS:
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtsp/COPYING.MIT:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free), (gst_rtspsrc_cleanup),
(gst_rtspsrc_alloc_udp_ports), (pad_unblocked), (pad_blocked),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_activate_streams), (gst_rtspsrc_loop_interleaved),
(gst_rtspsrc_loop_udp), (gst_rtspsrc_send),
(gst_rtspsrc_parse_methods),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_prepare_transports), (gst_rtspsrc_setup_streams),
(gst_rtspsrc_open), (gst_rtspsrc_close):
* gst/rtsp/gstrtspsrc.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_send), (read_line),
(parse_request_line), (parse_line), (rtsp_connection_read),
(rtsp_connection_close):
* gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_strresult),
(rtsp_method_as_text), (rtsp_header_as_text),
(rtsp_status_as_text), (rtsp_find_header_field),
(rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspextwms.c: (rtsp_ext_wms_after_send),
(rtsp_ext_wms_configure_stream):
* gst/rtsp/rtspmessage.c: (rtsp_message_new), (rtsp_message_init),
(rtsp_message_new_request), (rtsp_message_init_request),
(rtsp_message_new_response), (rtsp_message_init_response),
(rtsp_message_init_data), (rtsp_message_unset),
(rtsp_message_free), (rtsp_message_add_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_get_body), (dump_mem), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_media_get_attribute_val_n), (read_string), (read_string_del),
(sdp_parse_line), (sdp_message_parse_buffer), (print_media),
(sdp_message_dump):
Allow url to be NULL to be able to use it for server connections.
Can now send responses as well as requests.
No longer hangs in an endless loop if EOF is received.
Can now convert a status code to a text string.
Return RTSP_HDR_INVALID for unknown headers.
Return RTSP_INVALID for unknown methods.
Copy CSeq and Session headers from the request.
Only free memory corresponding to the currently set message type.
Added const to function arguments as appropriate.
Avoid a compiler warning when initializing nmedia.
Use guint rather than gint to avoid compiler warnings.
Fix crasher in wms extension.
Factor out stream setup from open_connection.
Delay activation of streams when actual data is received from the
server, this prepares us to do proper protocol switching.
Added new license.
Fixes #380895.
2007-01-10 15:19:48 +00:00
|
|
|
guint i;
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
g_print (" attributes:\n");
|
|
|
|
for (i = 0; i < msg->attributes->len; i++) {
|
|
|
|
SDPAttribute *attr = &g_array_index (msg->attributes, SDPAttribute, i);
|
|
|
|
|
|
|
|
g_print (" attribute '%s' : '%s'\n", attr->key, attr->value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (msg->medias->len > 0) {
|
gst/rtsp/: Allow url to be NULL to be able to use it for server connections.
Original commit message from CVS:
Patch by: Peter Kjellerstedt <pkj at axis com>
* gst/rtsp/COPYING.MIT:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_create_stream),
(gst_rtspsrc_stream_free), (gst_rtspsrc_cleanup),
(gst_rtspsrc_alloc_udp_ports), (pad_unblocked), (pad_blocked),
(gst_rtspsrc_stream_configure_transport),
(gst_rtspsrc_activate_streams), (gst_rtspsrc_loop_interleaved),
(gst_rtspsrc_loop_udp), (gst_rtspsrc_send),
(gst_rtspsrc_parse_methods),
(gst_rtspsrc_create_transports_string),
(gst_rtspsrc_prepare_transports), (gst_rtspsrc_setup_streams),
(gst_rtspsrc_open), (gst_rtspsrc_close):
* gst/rtsp/gstrtspsrc.h:
* gst/rtsp/rtspconnection.c: (rtsp_connection_create),
(rtsp_connection_connect), (rtsp_connection_send), (read_line),
(parse_request_line), (parse_line), (rtsp_connection_read),
(rtsp_connection_close):
* gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_strresult),
(rtsp_method_as_text), (rtsp_header_as_text),
(rtsp_status_as_text), (rtsp_find_header_field),
(rtsp_find_method):
* gst/rtsp/rtspdefs.h:
* gst/rtsp/rtspextwms.c: (rtsp_ext_wms_after_send),
(rtsp_ext_wms_configure_stream):
* gst/rtsp/rtspmessage.c: (rtsp_message_new), (rtsp_message_init),
(rtsp_message_new_request), (rtsp_message_init_request),
(rtsp_message_new_response), (rtsp_message_init_response),
(rtsp_message_init_data), (rtsp_message_unset),
(rtsp_message_free), (rtsp_message_add_header),
(rtsp_message_get_header), (rtsp_message_set_body),
(rtsp_message_get_body), (dump_mem), (rtsp_message_dump):
* gst/rtsp/rtspmessage.h:
* gst/rtsp/sdpmessage.c: (sdp_message_get_attribute_val_n),
(sdp_media_get_attribute_val_n), (read_string), (read_string_del),
(sdp_parse_line), (sdp_message_parse_buffer), (print_media),
(sdp_message_dump):
Allow url to be NULL to be able to use it for server connections.
Can now send responses as well as requests.
No longer hangs in an endless loop if EOF is received.
Can now convert a status code to a text string.
Return RTSP_HDR_INVALID for unknown headers.
Return RTSP_INVALID for unknown methods.
Copy CSeq and Session headers from the request.
Only free memory corresponding to the currently set message type.
Added const to function arguments as appropriate.
Avoid a compiler warning when initializing nmedia.
Use guint rather than gint to avoid compiler warnings.
Fix crasher in wms extension.
Factor out stream setup from open_connection.
Delay activation of streams when actual data is received from the
server, this prepares us to do proper protocol switching.
Added new license.
Fixes #380895.
2007-01-10 15:19:48 +00:00
|
|
|
guint i;
|
2005-05-11 07:44:44 +00:00
|
|
|
|
|
|
|
g_print (" medias:\n");
|
|
|
|
for (i = 0; i < msg->medias->len; i++) {
|
|
|
|
g_print (" media %d:\n", i);
|
|
|
|
print_media (&g_array_index (msg->medias, SDPMedia, i));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return RTSP_OK;
|
|
|
|
}
|