comparison src/icecast/icecast.c @ 2801:d3c4dd274890

some cleanup
author Andrew O. Shadoura <bugzilla@tut.by>
date Sat, 12 Jul 2008 02:55:33 +0300
parents 48550fe6723c
children 2a1f58c9bf84
comparison
equal deleted inserted replaced
2800:ea4e97a98914 2801:d3c4dd274890
1 /* Icecast-Plugin 1 /* Icecast-Plugin
2 * (C) copyright 2008 based of FileWriter-plugin 2 * (C) copyright 2008 Andrew O. Shadoura
3 * Based on FileWriter-plugin
4 * (C) copyright 2007 merging of Disk Writer and Out-Lame by Michael Färber
3 * 5 *
4 * Original Out-Lame-Plugin: 6 * Original Out-Lame-Plugin:
5 * (C) copyright 2002 Lars Siebold <khandha5@gmx.net> 7 * (C) copyright 2002 Lars Siebold <khandha5@gmx.net>
6 * (C) copyright 2006-2007 porting to audacious by Yoshiki Yazawa <yaz@cc.rim.or.jp> 8 * (C) copyright 2006-2007 porting to audacious by Yoshiki Yazawa <yaz@cc.rim.or.jp>
7 * 9 *
76 VFSFile *output_file = NULL; 78 VFSFile *output_file = NULL;
77 guint64 written = 0; 79 guint64 written = 0;
78 guint64 offset = 0; 80 guint64 offset = 0;
79 Tuple *tuple = NULL; 81 Tuple *tuple = NULL;
80 static shout_t *shout = NULL; 82 static shout_t *shout = NULL;
81 gboolean paused = FALSE; 83 static gboolean paused = FALSE;
82 84
83 static void ice_init(void); 85 static void ice_init(void);
84 static void ice_cleanup(void); 86 static void ice_cleanup(void);
85 static void ice_about(void); 87 static void ice_about(void);
86 static gint ice_open(AFormat fmt, gint rate, gint nch); 88 static gint ice_open(AFormat fmt, gint rate, gint nch);
144 } 146 }
145 147
146 static void ice_init(void) 148 static void ice_init(void)
147 { 149 {
148 ConfigDb *db; 150 ConfigDb *db;
149 puts("ICE_INIT"); 151 g_debug("ICE_INIT\n");
150 shout_init(); 152 shout_init();
151 printf("Using libshout %s\n", shout_version(NULL, NULL, NULL)); 153 g_message("Using libshout %s\n", shout_version(NULL, NULL, NULL));
152 154
153 db = aud_cfg_db_open(); 155 db = aud_cfg_db_open();
154 aud_cfg_db_get_int(db, "icecast", "streamformat", &streamformat); 156 aud_cfg_db_get_int(db, ICECAST_CFGID, "streamformat", &streamformat);
155 aud_cfg_db_get_string(db, "icecast", "server_address", &server_address); 157 aud_cfg_db_get_string(db, ICECAST_CFGID, "server_address", &server_address);
156 aud_cfg_db_get_int(db, "icecast", "server_port", &server_port); 158 aud_cfg_db_get_int(db, ICECAST_CFGID, "server_port", &server_port);
157 if (!server_port) server_port=8000; 159 if (!server_port) server_port=8000;
158 aud_cfg_db_get_int(db, "icecast", "timeout", &ice_close_timeout); 160 aud_cfg_db_get_int(db, ICECAST_CFGID, "timeout", &ice_close_timeout);
159 if (!ice_close_timeout) ice_close_timeout=5; 161 if (!ice_close_timeout) ice_close_timeout=5;
160 aud_cfg_db_get_int(db, "icecast", "buffersize", &buffersize); 162 aud_cfg_db_get_int(db, ICECAST_CFGID, "buffersize", &buffersize);
161 if (!buffersize) buffersize=8192; 163 if (!buffersize) buffersize=8192;
162 buffersize_new=buffersize; 164 buffersize_new=buffersize;
163 aud_cfg_db_get_double(db, "icecast", "bufferflush", &bufferflushperc); 165 aud_cfg_db_get_double(db, ICECAST_CFGID, "bufferflush", &bufferflushperc);
164 if (!bufferflushperc) bufferflushperc=80.0; 166 if (!bufferflushperc) bufferflushperc=80.0;
165 bufferflush=(gint)(buffersize*bufferflushperc); 167 bufferflush=(gint)(buffersize*bufferflushperc);
166 bufferflush_new=bufferflush; 168 bufferflush_new=bufferflush;
167 aud_cfg_db_get_string(db, "icecast", "server_user", &server_user); 169 aud_cfg_db_get_string(db, ICECAST_CFGID, "server_user", &server_user);
168 aud_cfg_db_get_string(db, "icecast", "server_password", &server_password); 170 aud_cfg_db_get_string(db, ICECAST_CFGID, "server_password", &server_password);
169 aud_cfg_db_close(db); 171 aud_cfg_db_close(db);
170 172
171 outputbuffer=g_try_malloc(buffersize); 173 outputbuffer=g_try_malloc(buffersize);
172 174
173 set_plugin(); 175 set_plugin();
255 if (!(shout = shout_new())) 257 if (!(shout = shout_new()))
256 return 0; 258 return 0;
257 259
258 if (shout_set_host(shout, server_address) != SHOUTERR_SUCCESS) 260 if (shout_set_host(shout, server_address) != SHOUTERR_SUCCESS)
259 { 261 {
260 printf("Error setting hostname: %s\n", shout_get_error(shout)); 262 g_warning("Error setting hostname: %s\n", shout_get_error(shout));
261 return 0; 263 return 0;
262 } 264 }
263 265
264 if (shout_set_protocol(shout, SHOUT_PROTOCOL_HTTP) != SHOUTERR_SUCCESS) 266 if (shout_set_protocol(shout, SHOUT_PROTOCOL_HTTP) != SHOUTERR_SUCCESS)
265 { 267 {
266 printf("Error setting protocol: %s\n", shout_get_error(shout)); 268 g_warning("Error setting protocol: %s\n", shout_get_error(shout));
267 return 0; 269 return 0;
268 } 270 }
269 271
270 if (shout_set_port(shout, server_port) != SHOUTERR_SUCCESS) 272 if (shout_set_port(shout, server_port) != SHOUTERR_SUCCESS)
271 { 273 {
272 printf("Error setting port: %s\n", shout_get_error(shout)); 274 g_warning("Error setting port: %s\n", shout_get_error(shout));
273 return 0; 275 return 0;
274 } 276 }
275 277
276 if (shout_set_password(shout, "password") != SHOUTERR_SUCCESS) 278 if (shout_set_password(shout, "password") != SHOUTERR_SUCCESS)
277 { 279 {
278 printf("Error setting password: %s\n", shout_get_error(shout)); 280 g_warning("Error setting password: %s\n", shout_get_error(shout));
279 return 0; 281 return 0;
280 } 282 }
281 283
282 if (shout_set_mount(shout, "/test") != SHOUTERR_SUCCESS) 284 if (shout_set_mount(shout, "/test") != SHOUTERR_SUCCESS)
283 { 285 {
284 printf("Error setting mount: %s\n", shout_get_error(shout)); 286 g_warning("Error setting mount: %s\n", shout_get_error(shout));
285 return 0; 287 return 0;
286 } 288 }
287 289
288 if (shout_set_user(shout, "source") != SHOUTERR_SUCCESS) 290 if (shout_set_user(shout, "source") != SHOUTERR_SUCCESS)
289 { 291 {
290 printf("Error setting user: %s\n", shout_get_error(shout)); 292 g_warning("Error setting user: %s\n", shout_get_error(shout));
291 return 0; 293 return 0;
292 } 294 }
293 295
294 if (shout_set_format(shout, streamformat_shout[streamformat]) != SHOUTERR_SUCCESS) 296 if (shout_set_format(shout, streamformat_shout[streamformat]) != SHOUTERR_SUCCESS)
295 { 297 {
296 printf("Error setting user: %s\n", shout_get_error(shout)); 298 g_warning("Error setting user: %s\n", shout_get_error(shout));
297 return 0; 299 return 0;
298 } 300 }
299 301
300 if (shout_open(shout) != SHOUTERR_SUCCESS) 302 if (shout_open(shout) != SHOUTERR_SUCCESS)
301 { 303 {
302 printf("Error connecting to server: %s\n", shout_get_error(shout)); 304 g_warning("Error connecting to server: %s\n", shout_get_error(shout));
303 return 0; 305 return 0;
304 } 306 }
305 } 307 }
306 else 308 else
307 rv = 1; 309 rv = 1;
389 plugin.write(ptr, length); 391 plugin.write(ptr, length);
390 } 392 }
391 393
392 static gint ice_real_write(void* ptr, gint length) 394 static gint ice_real_write(void* ptr, gint length)
393 { 395 {
394 int ret; 396 gint ret;
395 if (!length) return length; 397 if (!length) return length;
396 ret = shout_send(shout, ptr, length); 398 ret = shout_send(shout, ptr, length);
397 shout_sync(shout); 399 shout_sync(shout);
398 printf("ice_write[%d:%d](", ret, length); 400 g_debug("ice_write[%d:%d](", ret, length);
399 { 401 {
400 int i; 402 gint i;
401 for (i=0;(i<length)&&(i<16);i++) printf("%c",g_ascii_isprint(((char*)ptr)[i])?(((char*)ptr)[i]):'.'); 403 for (i=0;(i<length)&&(i<16);i++) g_debug("%c",g_ascii_isprint(((char*)ptr)[i])?(((char*)ptr)[i]):'.');
402 } 404 }
403 printf(")\n"); 405 g_debug(")\n");
404 return 0; 406 return 0;
405 } 407 }
406 408
407 static gint ice_write_output(void *ptr, gint length) 409 static gint ice_write_output(void *ptr, gint length)
408 { 410 {
409 if ((!shout) || (!length)) return 0; 411 if ((!shout) || (!length)) return 0;
410 printf("outputlength=%d, length=%d...",outputlength, length); 412 g_debug("outputlength=%d, length=%d...",outputlength, length);
411 if ((outputlength>bufferflush)||((outputlength+length)>buffersize)) 413 if ((outputlength>bufferflush)||((outputlength+length)>buffersize))
412 { 414 {
413 printf("flushing\n"); 415 g_debug("flushing\n");
414 outputlength=ice_real_write(outputbuffer, outputlength); 416 outputlength=ice_real_write(outputbuffer, outputlength);
415 } 417 }
416 { 418 {
417 if (length>buffersize) 419 if (length>buffersize)
418 { 420 {
419 printf("data too long, flushing\n"); 421 g_debug("data too long, flushing\n");
420 ice_real_write(ptr, length); 422 ice_real_write(ptr, length);
421 } 423 }
422 else 424 else
423 { 425 {
424 printf("adding\n"); 426 g_debug("adding\n");
425 memcpy(&(outputbuffer[outputlength]), ptr, length); 427 memcpy(&(outputbuffer[outputlength]), ptr, length);
426 outputlength+=length; 428 outputlength+=length;
427 } 429 }
428 } 430 }
429 return length; 431 return length;
438 written = 0; 440 written = 0;
439 shout_close(shout); 441 shout_close(shout);
440 } 442 }
441 shout = NULL; 443 shout = NULL;
442 ice_tid=0; 444 ice_tid=0;
443 puts("ICE_REAL_CLOSE"); 445 g_debug("ICE_REAL_CLOSE\n");
444 return FALSE; 446 return FALSE;
445 } 447 }
446 448
447 449
448 static void ice_close(void) 450 static void ice_close(void)
449 { 451 {
450 if (ice_tid) g_source_remove(ice_tid); 452 if (ice_tid) g_source_remove(ice_tid);
451 ice_tid=g_timeout_add_seconds(3, ice_real_close, NULL); 453 ice_tid=g_timeout_add_seconds(3, ice_real_close, NULL);
452 puts("ICE_CLOSE: starting timer"); 454 g_debug("ICE_CLOSE: starting timer\n");
453 } 455 }
454 456
455 static void ice_flush(gint time) 457 static void ice_flush(gint time)
456 { 458 {
457 if (time < 0) 459 if (time < 0)
511 513
512 bufferflushperc = gtk_spin_button_get_value(GTK_SPIN_BUTTON(bufferflush_spin)); 514 bufferflushperc = gtk_spin_button_get_value(GTK_SPIN_BUTTON(bufferflush_spin));
513 bufferflush_new=(gint)(buffersize*bufferflushperc); 515 bufferflush_new=(gint)(buffersize*bufferflushperc);
514 516
515 db = aud_cfg_db_open(); 517 db = aud_cfg_db_open();
516 aud_cfg_db_set_int(db, "icecast", "streamformat", streamformat); 518 aud_cfg_db_set_int(db, ICECAST_CFGID, "streamformat", streamformat);
517 aud_cfg_db_set_string(db, "icecast", "server_address", server_address); 519 aud_cfg_db_set_string(db, ICECAST_CFGID, "server_address", server_address);
518 aud_cfg_db_set_string(db, "icecast", "server_user", server_user); 520 aud_cfg_db_set_string(db, ICECAST_CFGID, "server_user", server_user);
519 aud_cfg_db_set_string(db, "icecast", "server_password", server_password); 521 aud_cfg_db_set_string(db, ICECAST_CFGID, "server_password", server_password);
520 aud_cfg_db_set_int(db, "icecast", "server_port", server_port); 522 aud_cfg_db_set_int(db, ICECAST_CFGID, "server_port", server_port);
521 aud_cfg_db_set_int(db, "icecast", "timeout", ice_close_timeout); 523 aud_cfg_db_set_int(db, ICECAST_CFGID, "timeout", ice_close_timeout);
522 aud_cfg_db_set_int(db, "icecast", "buffersize", buffersize_new); 524 aud_cfg_db_set_int(db, ICECAST_CFGID, "buffersize", buffersize_new);
523 aud_cfg_db_set_double(db, "icecast", "bufferflush", bufferflushperc); 525 aud_cfg_db_set_double(db, ICECAST_CFGID, "bufferflush", bufferflushperc);
524 526
525 aud_cfg_db_close(db); 527 aud_cfg_db_close(db);
526 528
527 gtk_widget_destroy(configure_win); 529 gtk_widget_destroy(configure_win);
528 } 530 }