Constness changes
[melted] / src / miracle / miracle_connection.c
index 563a769..0e83c19 100644 (file)
@@ -133,7 +133,7 @@ static int connection_send( int fd, valerie_response response )
        }
        else
        {
-               char *message = "500 Empty Response\r\n\r\n";
+               const char *message = "500 Empty Response\r\n\r\n";
                write( fd, message, strlen( message ) );
        }
 
@@ -147,7 +147,7 @@ static int connection_read( int fd, char *command, int length )
        char *cr = strchr( command, '\r');
        if ( cr != NULL ) 
                cr[0] = '\0';
-       if ( eof_chk || strncmp( command, "BYE", 3 ) == 0 ) 
+       if ( eof_chk || strncasecmp( command, "BYE", 3 ) == 0 ) 
                nchars = 0;
        return nchars;
 }
@@ -201,6 +201,7 @@ void *parser_thread( void *arg )
 {
        struct hostent *he;
        connection_t *connection = arg;
+       mlt_properties owner = connection->owner;
        char address[ 512 ];
        char command[ 1024 ];
        int fd = connection->fd;
@@ -223,9 +224,52 @@ void *parser_thread( void *arg )
 
                while( !error && connection_read( fd, command, 1024 ) )
                {
-                       if ( strncmp( command, "STATUS", 6 ) )
+                       response = NULL;
+
+                       if ( !strncmp( command, "PUSH ", 5 ) )
+                       {
+                               char temp[ 20 ];
+                               int bytes;
+                               char *buffer = NULL;
+                               int total = 0;
+                               mlt_service service = NULL;
+
+                               connection_read( fd, temp, 20 );
+                               bytes = atoi( temp );
+                               buffer = malloc( bytes + 1 );
+                               while ( total < bytes )
+                               {
+                                       int count = read( fd, buffer + total, bytes - total );
+                                       if ( count >= 0 )
+                                               total += count;
+                                       else
+                                               break;
+                               }
+                               buffer[ bytes ] = '\0';
+                               if ( bytes > 0 && total == bytes )
+                               {
+                                       if ( mlt_properties_get( owner, "push-parser-off" ) == 0 )
+                                       {
+                                               service = ( mlt_service )mlt_factory_producer( NULL, "westley-xml", buffer );
+                                               mlt_events_fire( owner, "push-received", &response, command, service, NULL );
+                                               if ( response == NULL )
+                                                       response = valerie_parser_push( parser, command, service );
+                                       }
+                                       else
+                                       {
+                                               response = valerie_parser_received( parser, command, buffer );
+                                       }
+                               }
+                               error = connection_send( fd, response );
+                               valerie_response_close( response );
+                               mlt_service_close( service );
+                               free( buffer );
+                       }
+                       else if ( strncmp( command, "STATUS", 6 ) )
                        {
-                               response = valerie_parser_execute( parser, command );
+                               mlt_events_fire( owner, "command-received", &response, command, NULL );
+                               if ( response == NULL )
+                                       response = valerie_parser_execute( parser, command );
                                miracle_log( LOG_INFO, "%s \"%s\" %d", address, command, valerie_response_get_error_code( response ) );
                                error = connection_send( fd, response );
                                valerie_response_close( response );