All pastes #251266 Raw Edit

Someone

public c v1 · immutable
#251266 ·published 2006-11-17 23:17 UTC
rendered paste body
#include <stdio.h>#include <stdlib.h>#include <sys/types.h> #include <sys/socket.h>#include <netinet/in.h>#include <xmms/xmmsctrl.h>#define FILE_TYPES 3#define TCP_PORT 60000void xmmsinfo(int);void error(char *msg){	perror(msg);	exit(1);}static gint xmms_session(void){	gint session;	for(session = 0 ; session < 16 ; session++)	if (xmms_remote_is_running(session))		return session;	exit(1);}void xmmsinfo(int sock){	int x, n;	char buffer[256], *out, *file = "", *title = "";	gint session, pos, rate=0, freq=0, nch=0, track_length=0, rerr=0;	for(session = 0; session < 16; session++)		if (xmms_remote_is_running(session))			break;	if (session == 16) {		exit(1);	} else {		session = xmms_session();	}	pos = xmms_remote_get_playlist_pos(session);	xmms_remote_get_info(session, &rate, &freq, &nch);	file = xmms_remote_get_playlist_file(session, pos);	track_length = xmms_remote_get_playlist_time(session, pos) / 1000;	title = xmms_remote_get_playlist_title(session, pos);	if (rate && freq && nch && file && track_length && title) {		bzero(buffer,256);		n = read(sock,buffer,256);		if (n < 0) error("error reading from socket");		if (n < 0) error("error writing to socket");		sprintf(out, "%d:%-2.2d\n%d\n%d\n%d\n%s\n%s\n",				track_length/60, track_length%60, rate, freq, nch, title, file);		write(sock,out,strlen(out));	} else return 1;	return 0;}int main(void){	int sockfd, newsockfd, portno, clilen, pid;	struct sockaddr_in serv_addr, cli_addr;	sockfd = socket(AF_INET, SOCK_STREAM, 0);	if (sockfd < 0) error("error opening socket");	bzero((char *) &serv_addr, sizeof(serv_addr));	portno = TCP_PORT;	serv_addr.sin_family = AF_INET;	serv_addr.sin_addr.s_addr = INADDR_ANY;	serv_addr.sin_port = htons(portno);	if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)		error("error on binding");	listen(sockfd,5);	clilen = sizeof(cli_addr);	while (1) {		newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);		if (newsockfd < 0) error("error on accept");		pid = fork();		if (pid < 0) error("error on fork");		if (pid == 0) {			close(sockfd);			xmmsinfo(newsockfd);			exit(0);		}		else close(newsockfd);	}	return 0;}