Ejemplo n.º 1
0
static int bt_string2uuid(uuid_t *uuid, const char *string)
{
	uint32_t data0, data4;
	uint16_t data1, data2, data3, data5;

	if (sscanf(string, "%08x-%04hx-%04hx-%04hx-%08x%04hx",
				&data0, &data1, &data2, &data3, &data4, &data5) == 6) {
		uint8_t val[16];

		data0 = g_htonl(data0);
		data1 = g_htons(data1);
		data2 = g_htons(data2);
		data3 = g_htons(data3);
		data4 = g_htonl(data4);
		data5 = g_htons(data5);

		memcpy(&val[0], &data0, 4);
		memcpy(&val[4], &data1, 2);
		memcpy(&val[6], &data2, 2);
		memcpy(&val[8], &data3, 2);
		memcpy(&val[10], &data4, 4);
		memcpy(&val[14], &data5, 2);

		sdp_uuid128_create(uuid, val);

		return 0;
	}

	return -EINVAL;
}
Ejemplo n.º 2
0
/**
 * gnome_vfs_address_get_sockaddr:
 * @address: A #GnomeVFSAddress
 * @port: A valid port in host byte order to set in the returned sockaddr
 * structure.
 * @len: A pointer to an int which will contain the length of the
 * return sockaddr structure.
 *
 * This function tanslates @address into a equivalent
 * sockaddr structure. The port specified at @port will
 * be set in the structure and @len will be set to the length
 * of the structure.
 * 
 * 
 * Return value: A newly allocated sockaddr structure the caller must free
 * or %NULL if @address did not point to a valid #GnomeVFSAddress.
 **/
struct sockaddr *
gnome_vfs_address_get_sockaddr (GnomeVFSAddress *address,
				guint16          port,
				int             *len)
{
	struct sockaddr *sa;

	g_return_val_if_fail (address != NULL, NULL);

	sa = g_memdup (address->sa, SA_SIZE (address->sa));

	switch (address->sa->sa_family) {
#ifdef ENABLE_IPV6
	case AF_INET6:
		SIN6 (sa)->sin6_port = g_htons (port);

		if (len != NULL) {
			*len = SIN6_LEN;
		}
		
		break;
#endif
	case AF_INET:
		SIN (sa)->sin_port = g_htons (port);

		if (len != NULL) {
			*len = SIN_LEN;
		}
		break;

	}

	return sa;
}
Ejemplo n.º 3
0
ArvGvcpPacket *
arv_gvcp_packet_new_packet_resend_cmd (guint32 frame_id,
				       guint32 first_block, guint32 last_block,
				       guint16 packet_id, size_t *packet_size)
{
	ArvGvcpPacket *packet;
	guint32 *data;

	g_return_val_if_fail (packet_size != NULL, NULL);

	*packet_size = sizeof (ArvGvcpHeader) + 3 * sizeof (guint32);

	packet = g_malloc (*packet_size);

	packet->header.packet_type = g_htons (ARV_GVCP_PACKET_TYPE_RESEND);
	packet->header.command = g_htons (ARV_GVCP_COMMAND_PACKET_RESEND_CMD);
	packet->header.size = g_htons (3 * sizeof (guint32));
	packet->header.id = g_htons (packet_id);

	data = (guint32 *) &packet->data;

	data[0] = g_htonl (frame_id);
	data[1] = g_htonl (first_block);
	data[2] = g_htonl (last_block);

	return packet;
}
Ejemplo n.º 4
0
ArvGvcpPacket *
arv_gvcp_packet_new_write_register_cmd (guint32 address,
					guint32 value,
					guint16 packet_id,
					size_t *packet_size)
{
	ArvGvcpPacket *packet;
	guint32 n_address = g_htonl (address);
	guint32 n_value = g_htonl (value);

	g_return_val_if_fail (packet_size != NULL, NULL);

	*packet_size = sizeof (ArvGvcpHeader) + 2 * sizeof (guint32);

	packet = g_malloc (*packet_size);

	packet->header.packet_type = g_htons (ARV_GVCP_PACKET_TYPE_CMD);
	packet->header.command = g_htons (ARV_GVCP_COMMAND_WRITE_REGISTER_CMD);
	packet->header.size = g_htons (2 * sizeof (guint32));
	packet->header.id = g_htons (packet_id);

	memcpy (&packet->data, &n_address, sizeof (guint32));
	memcpy (&packet->data[sizeof (guint32)], &n_value, sizeof (guint32));

	return packet;
}
Ejemplo n.º 5
0
/* zwraca watcha */
static watch_t *jabber_dcc_init(int port) {
	struct sockaddr_in sin;
	int fd;

	if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
		debug_error("jabber_dcc_init() socket() FAILED (%s)\n", strerror(errno));
		return NULL;
	}

	sin.sin_family = AF_INET;
	sin.sin_addr.s_addr = INADDR_ANY;
	sin.sin_port = g_htons(port);

	while (bind(fd, (struct sockaddr *) &sin, sizeof(struct sockaddr_in))) {
		debug_error("jabber_dcc_init() bind() port: %d FAILED (%s)\n", port, strerror(errno));
		port++;
		if (port > 65535) {
			close(fd);
			return NULL;
		}

		sin.sin_port = g_htons(port);
	}
	if (listen(fd, 10)) {
		debug_error("jabber_dcc_init() listen() FAILED (%s)\n", strerror(errno));
		close(fd);
		return NULL;
	}
	debug_function("jabber_dcc_init() SUCCESSED fd:%d port:%d\n", fd, port);

	jabber_dcc_port = port;
	jabber_dcc_fd	= fd;
	return watch_add(&jabber_plugin, fd, WATCH_READ, jabber_dcc_handle_accept, NULL);
}
Ejemplo n.º 6
0
static
struct pgm_sock_t*
generate_sock (void)
{
	const pgm_tsi_t tsi = { { 1, 2, 3, 4, 5, 6 }, g_htons(1000) };
	struct pgm_sock_t* sock = g_new0 (struct pgm_sock_t, 1);
	memcpy (&sock->tsi, &tsi, sizeof(pgm_tsi_t));
	sock->is_bound = FALSE;
	sock->is_destroyed = FALSE;
	((struct sockaddr*)&sock->send_addr)->sa_family = AF_INET;
	((struct sockaddr_in*)&sock->send_addr)->sin_addr.s_addr = inet_addr ("127.0.0.2");
	((struct sockaddr*)&sock->send_gsr.gsr_group)->sa_family = AF_INET;
	((struct sockaddr_in*)&sock->send_gsr.gsr_group)->sin_addr.s_addr = inet_addr ("239.192.0.1");
	sock->dport = g_htons(TEST_PORT);
	sock->window = g_malloc0 (sizeof(pgm_txw_t));
	sock->txw_sqns = TEST_TXW_SQNS;
	sock->max_tpdu = TEST_MAX_TPDU;
	sock->max_tsdu = TEST_MAX_TPDU - sizeof(struct pgm_ip) - pgm_pkt_offset (FALSE, FALSE);
	sock->max_tsdu_fragment = TEST_MAX_TPDU - sizeof(struct pgm_ip) - pgm_pkt_offset (TRUE, FALSE);
	sock->max_apdu = MIN(TEST_TXW_SQNS, PGM_MAX_FRAGMENTS) * sock->max_tsdu_fragment;
	sock->iphdr_len = sizeof(struct pgm_ip);
	sock->spm_heartbeat_interval = g_malloc0 (sizeof(guint) * (2+2));
	sock->spm_heartbeat_interval[0] = pgm_secs(1);
	pgm_spinlock_init (&sock->txw_spinlock);
	pgm_mutex_init (&sock->source_mutex);
	pgm_mutex_init (&sock->timer_mutex);
	pgm_rwlock_init (&sock->lock);
	return sock;
}
Ejemplo n.º 7
0
gboolean
grid_string_to_sockaddr(const gchar *start, struct sockaddr *s, gsize *slen)
{
	EXTRA_ASSERT (start != NULL);
	EXTRA_ASSERT (slen != NULL);

	if (!*start)
		return FALSE;

	gchar *addr = g_strdup (start);
	STRING_STACKIFY(addr);
	EXTRA_ASSERT(addr != NULL);

	if (*addr == '/') { // UNIX socket
		struct sockaddr_un *sun = (struct sockaddr_un*) s;
		*slen = sizeof(*sun);
		sun->sun_family = AF_UNIX;
		g_strlcpy(sun->sun_path, addr, sizeof(sun->sun_path));
		return TRUE;
	}

	// Find the ':' separator and fill the working buffers with each part
	gchar *colon = strrchr(addr, ':');
	if (!colon) return FALSE;
	*(colon++) = '\0';

	// Parse the port
	guint16 u16port = 0;
	if (!_port_parse(colon, &u16port))
		return 0;

	// And now, parse the address
	if (addr[0] == '[') {
		struct sockaddr_in6 *sin6 = (struct sockaddr_in6*) s;
		size_t l = strlen(addr);
		*slen = sizeof(struct sockaddr_in6);
		if (addr[l-1] == ']')
			addr[--l] = '\0';
		if (0 < inet_pton(AF_INET6, addr+1, &sin6->sin6_addr)) {
			sin6->sin6_family = AF_INET6;
			sin6->sin6_port = g_htons(u16port);
			return 1;
		}
	} else {
		struct sockaddr_in *sin = (struct sockaddr_in*) s;
		*slen = sizeof(struct sockaddr_in);
		if (0 < inet_pton(AF_INET, addr, &sin->sin_addr)) {
			sin->sin_family = AF_INET;
			sin->sin_port = g_htons(u16port);
			return 1;
		}
	}
	return 0;
}
Ejemplo n.º 8
0
gssize g_obex_header_encode(GObexHeader *header, void *buf, gsize buf_len)
{
    guint8 *ptr = buf;
    guint16 u16;
    guint32 u32;
    gunichar2 *utf16;
    glong utf16_len;

    g_obex_debug(G_OBEX_DEBUG_HEADER, "header 0x%02x",
                 G_OBEX_HDR_ENC(header->id));

    if (buf_len < header->hlen)
        return -1;

    ptr = put_bytes(ptr, &header->id, sizeof(header->id));

    switch (G_OBEX_HDR_ENC(header->id)) {
    case G_OBEX_HDR_ENC_UNICODE:
        utf16_len = utf8_to_utf16(&utf16, header->v.string);
        if (utf16_len < 0 || (guint16) utf16_len > buf_len)
            return -1;
        g_assert_cmpuint(utf16_len + 3, ==, header->hlen);
        u16 = g_htons(utf16_len + 3);
        ptr = put_bytes(ptr, &u16, sizeof(u16));
        ptr = put_bytes(ptr, utf16, utf16_len);
        g_free(utf16);
        break;
    case G_OBEX_HDR_ENC_BYTES:
        u16 = g_htons(header->hlen);
        ptr = put_bytes(ptr, &u16, sizeof(u16));
        if (header->extdata)
            ptr = put_bytes(ptr, header->v.extdata, header->vlen);
        else
            ptr = put_bytes(ptr, header->v.data, header->vlen);
        break;
    case G_OBEX_HDR_ENC_UINT8:
        *ptr = header->v.u8;
        break;
    case G_OBEX_HDR_ENC_UINT32:
        u32 = g_htonl(header->v.u32);
        ptr = put_bytes(ptr, &u32, sizeof(u32));
        break;
    default:
        g_assert_not_reached();
    }

    return header->hlen;
}
Ejemplo n.º 9
0
static gboolean
sink_next_uint16 (SerialSink* sink, guint16 num)
{
  num = g_htons (num);

  return sink->sink_write (sink, (guint8*) &num, sizeof (num));
}
Ejemplo n.º 10
0
void
rtp_packet_set_seq(Rtp_Packet packet, guint16 seq)
{
  g_return_if_fail(packet != NULL);

  ((Rtp_Header) packet -> data) -> seq = g_htons(seq);
}
Ejemplo n.º 11
0
void
register_service (int port)
{
    int dnsfd;
    GSource *source;

    if (DNSServiceRegister (&g_sdref, 0, 0, NULL, "_xmms2._tcp", NULL, NULL,
                            g_htons (port), 0, NULL, dns_callback, NULL)
            != kDNSServiceErr_NoError) {
        printf ("failed to register!\n");
        exit (1);
    }

    dnsfd = DNSServiceRefSockFD (g_sdref);
    if (dnsfd == -1) {
        printf ("no fd!?\n");
        exit (1);
    }

    pollfd = g_new0 (GPollFD, 1);
    pollfd->fd = dnsfd;
    pollfd->events = G_IO_IN | G_IO_HUP | G_IO_ERR;

    source = g_source_new (&dns_ipc_func, sizeof (GSource));

    g_source_add_poll (source, pollfd);
    g_source_attach (source, NULL);
}
Ejemplo n.º 12
0
// http://doc.qt.nokia.com/4.6/datastreamformat.html
// A QString has the length in the first 4 bytes, then the string in UTF-16 encoding
// Has to be stored as big endian!
static gchar* char2qstring(const gchar* in, gsize* size)
{
  glong read, written;
  GError* error = NULL;
  gunichar2* out = g_utf8_to_utf16(in, -1, &read, &written, &error);

  if(error)
  {
    dt_print(DT_DEBUG_PWSTORAGE,"[pwstorage_kwallet] ERROR: error converting string: %s\n", error->message);
    g_error_free(error);
    return NULL;
  }

  glong i;
  for(i=0; i<written; ++i)
  {
    out[i] = g_htons(out[i]);
  }

  guint bytes = sizeof(gunichar2)*written;
  guint BE_bytes = GUINT_TO_BE(bytes);
  *size = sizeof(guint)+bytes;
  gchar* result = g_malloc(*size);

  memcpy(result, &BE_bytes, sizeof(guint));
  memcpy(result+sizeof(guint), out, bytes);

  return result;
}
Ejemplo n.º 13
0
/*
* Write a header to the current output file.
* The header consists of an identifying string, followed
* by a binary structure.
*/
void rtp_write_header(rtp_stream_info_t *strinfo, FILE *file)
{
	guint32 start_sec;     /* start of recording (GMT) (seconds) */
	guint32 start_usec;    /* start of recording (GMT) (microseconds)*/
	guint32 source;        /* network source (multicast address) */
	size_t sourcelen;
	guint16 port;          /* UDP port */
	guint16 padding;       /* 2 padding bytes */

	fprintf(file, "#!rtpplay%s %s/%u\n", RTPFILE_VERSION,
		get_addr_name(&(strinfo->dest_addr)),
		strinfo->dest_port);

	start_sec = g_htonl(strinfo->start_sec);
	start_usec = g_htonl(strinfo->start_usec);
	/* rtpdump only accepts guint32 as source, will be fake for IPv6 */
	memset(&source, 0, sizeof source);
	sourcelen = strinfo->src_addr.len;
	if (sourcelen > sizeof source)
		sourcelen = sizeof source;
	memcpy(&source, strinfo->src_addr.data, sourcelen);
	port = g_htons(strinfo->src_port);
	padding = 0;

	if (fwrite(&start_sec, 4, 1, file) == 0)
		return;
	if (fwrite(&start_usec, 4, 1, file) == 0)
		return;
	if (fwrite(&source, 4, 1, file) == 0)
		return;
	if (fwrite(&port, 2, 1, file) == 0)
		return;
	if (fwrite(&padding, 2, 1, file) == 0)
		return;
}
Ejemplo n.º 14
0
static ArvGvspPacket *
arv_gvsp_packet_new (ArvGvspContentType content_type,
		     guint16 frame_id, guint32 packet_id, size_t data_size, void *buffer, size_t *buffer_size)
{
	ArvGvspPacket *packet;
	size_t packet_size;

	packet_size = sizeof (ArvGvspPacket) + data_size;
	if (packet_size == 0 || (buffer != NULL && (buffer_size == NULL || packet_size > *buffer_size)))
		return NULL;

	if (buffer_size != NULL)
		*buffer_size = packet_size;

	if (buffer != NULL)
		packet = buffer;
	else
		packet = g_malloc (packet_size);

	packet->header.packet_type = 0;
	packet->header.frame_id = g_htons (frame_id);
	packet->header.packet_infos = g_htonl ((packet_id & ARV_GVSP_PACKET_INFOS_ID_MASK) |
					       ((content_type << ARV_GVSP_PACKET_INFOS_CONTENT_TYPE_POS) &
						ARV_GVSP_PACKET_INFOS_CONTENT_TYPE_MASK));

	return packet;
}
void
test_stop_on_connect (void)
{
    struct sockaddr_in address;
    const gchar host_name[] = "mx.local.net";
    const gchar ip_address[] = "192.168.123.123";
    guint16 port;

    port = g_htons(50443);
    address.sin_family = AF_INET;
    address.sin_port = port;
    inet_pton(AF_INET, ip_address, &(address.sin_addr));

    cut_assert_true(milter_server_context_connect(context,
                                                  host_name,
                                                  (struct sockaddr *)&address,
                                                  sizeof(address)));
    cut_assert_equal_uint(1, n_stop_on_connect);

    cut_assert_equal_string(host_name, connect_host_name);
    cut_assert_equal_int(sizeof(struct sockaddr_in), connect_address_size);

    cut_assert_equal_uint(1, n_stopped);
    cut_assert_equal_uint(0, n_accept);
}
Ejemplo n.º 16
0
PRIVATE void pickle_instance(Generator *g, ObjectStoreItem *item, ObjectStore *db) {
  Data *data = g->data;

  objectstore_item_set_integer(item, "voice_bypass_libaudiofile", 0);
  objectstore_item_set_integer(item, "voice_store_sample", data->store_sample);
  if (data->filename != NULL)
    objectstore_item_set_string(item, "voice_filename", data->filename);
  objectstore_item_set_integer(item, "voice_channels", data->channels);

  if (data->store_sample) {
    int bytelength = sizeof(gint16) * data->frames * data->channels;
    gint16 *buf = safe_malloc(bytelength);
    int i;

    objectstore_item_set_integer(item, "voice_length", data->frames * data->channels);

    for (i = 0; i < (data->frames * data->channels); i++)
      buf[i] = g_htons(MAX(-32768, MIN(32767, 32768 * data->sample[i])));

    objectstore_item_set(item, "voice_sample",
			 objectstore_datum_new_binary(bytelength, (void *) buf));

    free(buf);
  }
}
Ejemplo n.º 17
0
static GstBufferListItem
set_seq_header (GstBuffer ** buffer, guint group, guint idx, guint16 * seq)
{
  GST_RTP_HEADER_SEQ (GST_BUFFER_DATA (*buffer)) = g_htons (*seq);
  (*seq)++;
  return GST_BUFFER_LIST_SKIP_GROUP;
}
static void gfire_sq_gamespy_query(gfire_game_server *p_server, gboolean p_full, int p_socket)
{
	static const gchar info_query[] = "\\info\\";
	static const gchar rules_query[] = "\\rules\\";
	static const gchar players_query[] = "\\players\\";
	const gchar *query = NULL;

	if(!p_server->data)
		query = info_query;
	else
	{
		gfire_sq_gamespy_data *data = (gfire_sq_gamespy_data*)p_server->data->proto_data;
		if(data->query_stage == GFSQ_GAMESPY_STAGE_RULES && !data->query_id)
			query = rules_query;
		else if(data->query_stage == GFSQ_GAMESPY_STAGE_PLAYERS && !data->query_id)
			query = players_query;
		else
			return;
	}

	struct sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = g_htonl(p_server->ip);
	addr.sin_port = g_htons(p_server->query_port);

	sendto(p_socket, query, strlen(query), 0, (struct sockaddr*)&addr, sizeof(addr));
}
static GByteArray *
generate_duid_from_machine_id (void)
{
	GByteArray *duid;
	char *contents = NULL;
	GChecksum *sum;
	guint8 buffer[32]; /* SHA256 digest size */
	gsize sumlen = sizeof (buffer);
	const guint16 duid_type = g_htons (4);
	uuid_t uuid;
	GRand *generator;
	guint i;
	gboolean success = FALSE;

	/* Get the machine ID from /etc/machine-id; it's always in /etc no matter
	 * where our configured SYSCONFDIR is.  Alternatively, it might be in
	 * LOCALSTATEDIR /lib/dbus/machine-id.
	 */
	if (   g_file_get_contents ("/etc/machine-id", &contents, NULL, NULL)
	    || g_file_get_contents (LOCALSTATEDIR "/lib/dbus/machine-id", &contents, NULL, NULL)) {
		contents = g_strstrip (contents);
		success = machine_id_parse (contents, uuid);
		if (success) {
			/* Hash the machine ID so it's not leaked to the network */
			sum = g_checksum_new (G_CHECKSUM_SHA256);
			g_checksum_update (sum, (const guchar *) &uuid, sizeof (uuid));
			g_checksum_get_digest (sum, buffer, &sumlen);
			g_checksum_free (sum);
		}
		g_free (contents);
	}

	if (!success) {
		nm_log_warn (LOGD_DHCP6, "Failed to read " SYSCONFDIR "/machine-id "
		             "or " LOCALSTATEDIR "/lib/dbus/machine-id to generate "
		             "DHCPv6 DUID; creating non-persistent random DUID.");

		generator = g_rand_new ();
		for (i = 0; i < sizeof (buffer) / sizeof (guint32); i++)
			((guint32 *) buffer)[i] = g_rand_int (generator);
		g_rand_free (generator);
	}

	/* Generate a DHCP Unique Identifier for DHCPv6 using the
	 * DUID-UUID method (see RFC 6355 section 4).  Format is:
	 *
	 * u16: type (DUID-UUID = 4)
	 * u8[16]: UUID bytes
	 */
	duid = g_byte_array_sized_new (18);
	g_byte_array_append (duid, (guint8 *) &duid_type, sizeof (duid_type));

	/* Since SHA256 is 256 bits, but UUID is 128 bits, we just take the first
	 * 128 bits of the SHA256 as the DUID-UUID.
	 */
	g_byte_array_append (duid, buffer, 16);

	return duid;
}
Ejemplo n.º 20
0
EXPORT_C
#endif

void
gst_rtp_buffer_set_seq (GstBuffer * buffer, guint16 seq)
{
  GST_RTP_HEADER_SEQ (GST_BUFFER_DATA (buffer)) = g_htons (seq);
}
Ejemplo n.º 21
0
static
struct pgm_sk_buff_t*
generate_udp_encap_pgm (void)
{
	const char source[] = "i am not a string";
	const guint source_len = sizeof(source);
	struct pgm_sk_buff_t* skb;
	GError* err = NULL;

	skb = pgm_alloc_skb (1500);
	skb->sock		= (pgm_sock_t*)0x1;
	skb->tstamp		= 0x1;
	skb->data		= skb->head;
	skb->len		= sizeof(struct pgm_header) + sizeof(struct pgm_data) + source_len;
	skb->tail		= (guint8*)skb->data + skb->len;

/* add PGM header */
	struct pgm_header* pgmhdr = skb->head;
	pgmhdr->pgm_sport	= g_htons ((guint16)1000);
	pgmhdr->pgm_dport	= g_htons ((guint16)7500);
	pgmhdr->pgm_type	= PGM_ODATA;
	pgmhdr->pgm_options	= 0;
	pgmhdr->pgm_gsi[0]	= 1;
	pgmhdr->pgm_gsi[1]	= 2;
	pgmhdr->pgm_gsi[2]	= 3;
	pgmhdr->pgm_gsi[3]	= 4;
	pgmhdr->pgm_gsi[4]	= 5;
	pgmhdr->pgm_gsi[5]	= 6;
	pgmhdr->pgm_tsdu_length = g_htons (source_len);

/* add ODATA header */
	struct pgm_data* datahdr = (gpointer)(pgmhdr + 1);
	datahdr->data_sqn	= g_htonl ((guint32)0);
	datahdr->data_trail	= g_htonl ((guint32)-1);

/* add payload */
	gpointer data = (gpointer)(datahdr + 1);
	memcpy (data, source, source_len);

/* finally PGM checksum */
	pgmhdr->pgm_checksum 	= 0;
	pgmhdr->pgm_checksum	= pgm_csum_fold (pgm_csum_partial (pgmhdr, sizeof(struct pgm_header) + sizeof(struct pgm_data) + source_len, 0));

	return skb;
}
Ejemplo n.º 22
0
ArvGvcpPacket *
arv_gvcp_packet_new_discovery_ack (size_t *packet_size)
{
	ArvGvcpPacket *packet;

	g_return_val_if_fail (packet_size != NULL, NULL);

	*packet_size = sizeof (ArvGvcpHeader) + ARV_GVBS_DISCOVERY_DATA_SIZE ;

	packet = g_malloc (*packet_size);

	packet->header.packet_type = g_htons (ARV_GVCP_PACKET_TYPE_ACK);
	packet->header.command = g_htons (ARV_GVCP_COMMAND_DISCOVERY_ACK);
	packet->header.size = g_htons (ARV_GVBS_DISCOVERY_DATA_SIZE);
	packet->header.id = g_htons (0xffff);

	return packet;
}
Ejemplo n.º 23
0
ArvGvcpPacket *
arv_gvcp_packet_new_discovery_cmd (size_t *packet_size)
{
	ArvGvcpPacket *packet;

	g_return_val_if_fail (packet_size != NULL, NULL);

	*packet_size = sizeof (ArvGvcpHeader);

	packet = g_malloc (*packet_size);

	packet->header.packet_type = g_htons (ARV_GVCP_PACKET_TYPE_BROADCAST_CMD);
	packet->header.command = g_htons (ARV_GVCP_COMMAND_DISCOVERY_CMD);
	packet->header.size = g_htons (0x0000);
	packet->header.id = g_htons (0xffff);

	return packet;
}
Ejemplo n.º 24
0
static GstBuffer *
gst_rtp_dtmf_src_create_next_rtp_packet (GstRTPDTMFSrc * dtmfsrc)
{
  GstBuffer *buf;
  GstRTPDTMFPayload *payload;
  GstRTPBuffer rtpbuffer = GST_RTP_BUFFER_INIT;

  buf = gst_rtp_buffer_new_allocate (sizeof (GstRTPDTMFPayload), 0, 0);

  gst_rtp_buffer_map (buf, GST_MAP_READWRITE, &rtpbuffer);

  gst_rtp_dtmf_prepare_rtp_headers (dtmfsrc, &rtpbuffer);

  /* timestamp and duration of GstBuffer */
  /* Redundant buffer have no duration ... */
  if (dtmfsrc->redundancy_count > 1)
    GST_BUFFER_DURATION (buf) = 0;
  else
    GST_BUFFER_DURATION (buf) = dtmfsrc->ptime * GST_MSECOND;
  GST_BUFFER_PTS (buf) = dtmfsrc->timestamp;

  payload = (GstRTPDTMFPayload *) gst_rtp_buffer_get_payload (&rtpbuffer);

  /* copy payload and convert to network-byte order */
  memmove (payload, dtmfsrc->payload, sizeof (GstRTPDTMFPayload));

  payload->duration = g_htons (payload->duration);

  if (dtmfsrc->redundancy_count <= 1 && dtmfsrc->last_packet) {
    GstClockTime inter_digit_interval = MIN_INTER_DIGIT_INTERVAL;

    if (inter_digit_interval % dtmfsrc->ptime != 0)
      inter_digit_interval += dtmfsrc->ptime -
          (MIN_INTER_DIGIT_INTERVAL % dtmfsrc->ptime);

    GST_BUFFER_DURATION (buf) += inter_digit_interval * GST_MSECOND;
  }

  GST_LOG_OBJECT (dtmfsrc, "Creating new buffer with event %u duration "
      " gst: %" GST_TIME_FORMAT " at %" GST_TIME_FORMAT "(rtp ts:%u dur:%u)",
      dtmfsrc->payload->event, GST_TIME_ARGS (GST_BUFFER_DURATION (buf)),
      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), dtmfsrc->rtp_timestamp,
      dtmfsrc->payload->duration);

  /* duration of DTMF payloadfor the NEXT packet */
  /* not updated for redundant packets */
  if (dtmfsrc->redundancy_count <= 1)
    dtmfsrc->payload->duration += dtmfsrc->ptime * dtmfsrc->clock_rate / 1000;

  if (GST_CLOCK_TIME_IS_VALID (dtmfsrc->timestamp))
    dtmfsrc->timestamp += GST_BUFFER_DURATION (buf);

  gst_rtp_buffer_unmap (&rtpbuffer);

  return buf;
}
Ejemplo n.º 25
0
/* pack two bytes as "guint16" into buf
 * return the number of bytes packed, otherwise return -1 */
gint create_packet_w(guint8 *buf, guint8 **cursor, guint16 w)
{
	if (*cursor <= buf + MAX_PACKET_SIZE - sizeof(guint16)) {
		**(guint16 **) cursor = g_htons(w);
		*cursor += sizeof(guint16);
		return sizeof(guint16);
	} else {
		return -1;
	}
}
Ejemplo n.º 26
0
EXPORT_C
#endif

void
gst_rtp_buffer_set_seq (GstBuffer * buffer, guint16 seq)
{
  g_return_if_fail (GST_IS_BUFFER (buffer));
  g_return_if_fail (GST_BUFFER_DATA (buffer) != NULL);

  GST_RTP_HEADER_SEQ (buffer) = g_htons (seq);
}
Ejemplo n.º 27
0
/* utility function for writing a sample to file in rtpdump -F dump format (.rtp)*/
static void rtp_write_sample(rtpdump_info_t* rtpdump_info, FILE* file)
{
    guint16 length;    /* length of packet, including this header (may
                          be smaller than plen if not whole packet recorded) */
    guint16 plen;      /* actual header+payload length for RTP, 0 for RTCP */
    guint32 offset;    /* milliseconds since the start of recording */

    length = g_htons(rtpdump_info->num_samples + 8);
    plen = g_htons(rtpdump_info->num_samples);
    offset = g_htonl(rtpdump_info->rec_time);

    if (fwrite(&length, 2, 1, file) == 0)
        return;
    if (fwrite(&plen, 2, 1, file) == 0)
        return;
    if (fwrite(&offset, 4, 1, file) == 0)
        return;
    if (fwrite(rtpdump_info->samples, rtpdump_info->num_samples, 1, file) == 0)
        return;
}
Ejemplo n.º 28
0
/* utility function for writing a sample to file in rtpdump -F dump format (.rtp)*/
void rtp_write_sample(rtp_sample_t* sample, FILE* file)
{
	guint16 length;    /* length of packet, including this header (may
	                     be smaller than plen if not whole packet recorded) */
	guint16 plen;      /* actual header+payload length for RTP, 0 for RTCP */
	guint32 offset;    /* milliseconds since the start of recording */

	length = g_htons(sample->header.frame_length + 8);
	plen = g_htons(sample->header.frame_length);
	offset = g_htonl(sample->header.rec_time);

	if (fwrite(&length, 2, 1, file) == 0)
		return;
	if (fwrite(&plen, 2, 1, file) == 0)
		return;
	if (fwrite(&offset, 4, 1, file) == 0)
		return;
	if (fwrite(sample->frame, sample->header.frame_length, 1, file) == 0)
		return;
}
Ejemplo n.º 29
0
static void gfire_sq_ase_query(gfire_game_server *p_server, gboolean p_full, int p_socket)
{
	static const gchar query = 's';

	struct sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = g_htonl(p_server->ip);
	addr.sin_port = g_htons(p_server->query_port);

	sendto(p_socket, &query, sizeof(query), 0, (struct sockaddr*)&addr, sizeof(addr));
}
Ejemplo n.º 30
0
static void gfire_sq_savage_query(gfire_game_server *p_server, gboolean p_full, int p_socket)
{
	static guint8 query[] = { 0x9e, 0x4c, 0x23, 0x00, 0x00, 0xce, 'G', 'F', 'S', 'Q' };

	struct sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = g_htonl(p_server->ip);
	addr.sin_port = g_htons(p_server->query_port);

	sendto(p_socket, query, 10, 0, (struct sockaddr*)&addr, sizeof(addr));
}