📄 http.c
字号:
static void mvar_PushNewVar( mvar_t *vars, char *name, char *value ){ mvar_t *f = mvar_New( name, value ); mvar_PushVar( vars, f );}static void mvar_AppendNewVar( mvar_t *vars, char *name, char *value ){ mvar_t *f = mvar_New( name, value ); mvar_AppendVar( vars, f );}/* arg= start[:stop[:step]],.. */static mvar_t *mvar_IntegerSetNew( char *name, char *arg ){ char *dup = strdup( arg ); char *str = dup; mvar_t *s = mvar_New( name, "set" ); while( str ) { char *p; int i_start,i_stop,i_step; int i_match; p = strchr( str, ',' ); if( p ) { *p++ = '\0'; } i_step = 0; i_match = sscanf( str, "%d:%d:%d", &i_start, &i_stop, &i_step ); if( i_match == 1 ) { i_stop = i_start; i_step = 1; } else if( i_match == 2 ) { i_step = i_start < i_stop ? 1 : -1; } if( i_match >= 1 ) { int i; if( ( i_start <= i_stop && i_step > 0 ) || ( i_start >= i_stop && i_step < 0 ) ) { for( i = i_start; ; i += i_step ) { char value[512]; if( ( i_step > 0 && i > i_stop ) || ( i_step < 0 && i < i_stop ) ) { break; } sprintf( value, "%d", i ); mvar_PushNewVar( s, name, value ); } } } str = p; } free( dup ); return s;}void PlaylistListNode( playlist_t *p_pl, playlist_item_t *p_node, char *name, mvar_t *s, int i_depth ){ if( p_node != NULL ) { if (p_node->i_children == -1) { char value[512]; mvar_t *itm = mvar_New( name, "set" ); sprintf( value, "%d", ( p_pl->status.p_item == p_node )? 1 : 0 ); mvar_AppendNewVar( itm, "current", value ); sprintf( value, "%d", p_node->input.i_id ); mvar_AppendNewVar( itm, "index", value ); mvar_AppendNewVar( itm, "name", p_node->input.psz_name ); mvar_AppendNewVar( itm, "uri", p_node->input.psz_uri ); sprintf( value, "Item"); mvar_AppendNewVar( itm, "type", value ); sprintf( value, "%d", i_depth ); mvar_AppendNewVar( itm, "depth", value ); mvar_AppendVar( s, itm ); } else { char value[512]; int i_child; mvar_t *itm = mvar_New( name, "set" ); mvar_AppendNewVar( itm, "name", p_node->input.psz_name ); mvar_AppendNewVar( itm, "uri", p_node->input.psz_name ); sprintf( value, "Node" ); mvar_AppendNewVar( itm, "type", value ); sprintf( value, "%d", p_node->input.i_id ); mvar_AppendNewVar( itm, "index", value ); sprintf( value, "%d", p_node->i_children); mvar_AppendNewVar( itm, "i_children", value ); sprintf( value, "%d", i_depth ); mvar_AppendNewVar( itm, "depth", value ); mvar_AppendVar( s, itm ); for (i_child = 0 ; i_child < p_node->i_children ; i_child++) PlaylistListNode( p_pl, p_node->pp_children[i_child], name, s, i_depth + 1); } }}static mvar_t *mvar_PlaylistSetNew( char *name, playlist_t *p_pl ){ playlist_view_t *p_view; mvar_t *s = mvar_New( name, "set" ); vlc_mutex_lock( &p_pl->object_lock ); p_view = playlist_ViewFind( p_pl, VIEW_CATEGORY ); /* FIXME */ if( p_view != NULL ) PlaylistListNode( p_pl, p_view->p_root, name, s, 0 ); vlc_mutex_unlock( &p_pl->object_lock ); return s;}static mvar_t *mvar_InfoSetNew( char *name, input_thread_t *p_input ){ mvar_t *s = mvar_New( name, "set" ); int i, j; if( p_input == NULL ) { return s; } vlc_mutex_lock( &p_input->input.p_item->lock ); for ( i = 0; i < p_input->input.p_item->i_categories; i++ ) { info_category_t *p_category = p_input->input.p_item->pp_categories[i]; mvar_t *cat = mvar_New( name, "set" ); mvar_t *iset = mvar_New( "info", "set" ); mvar_AppendNewVar( cat, "name", p_category->psz_name ); mvar_AppendVar( cat, iset ); for ( j = 0; j < p_category->i_infos; j++ ) { info_t *p_info = p_category->pp_infos[j]; mvar_t *info = mvar_New( "info", "" ); msg_Dbg( p_input, "adding info name=%s value=%s", p_info->psz_name, p_info->psz_value ); mvar_AppendNewVar( info, "name", p_info->psz_name ); mvar_AppendNewVar( info, "value", p_info->psz_value ); mvar_AppendVar( iset, info ); } mvar_AppendVar( s, cat ); } vlc_mutex_unlock( &p_input->input.p_item->lock ); return s;}#if 0static mvar_t *mvar_HttpdInfoSetNew( char *name, httpd_t *p_httpd, int i_type ){ mvar_t *s = mvar_New( name, "set" ); httpd_info_t info; int i; if( !p_httpd->pf_control( p_httpd, i_type, &info, NULL ) ) { for( i= 0; i < info.i_count; ) { mvar_t *inf; inf = mvar_New( name, "set" ); do { /* fprintf( stderr," mvar_HttpdInfoSetNew: append name=`%s' value=`%s'\n", info.info[i].psz_name, info.info[i].psz_value ); */ mvar_AppendNewVar( inf, info.info[i].psz_name, info.info[i].psz_value ); i++; } while( i < info.i_count && strcmp( info.info[i].psz_name, "id" ) ); mvar_AppendVar( s, inf ); } } /* free mem */ for( i = 0; i < info.i_count; i++ ) { free( info.info[i].psz_name ); free( info.info[i].psz_value ); } if( info.i_count > 0 ) { free( info.info ); } return s;}#endifstatic mvar_t *mvar_FileSetNew( char *name, char *psz_dir ){ mvar_t *s = mvar_New( name, "set" ); char tmp[MAX_DIR_SIZE], *p, *src;#ifdef HAVE_SYS_STAT_H struct stat stat_info;#endif DIR *p_dir; struct dirent *p_dir_content; char sep; /* convert all / to native separator */#if defined( WIN32 ) while( (p = strchr( psz_dir, '/' )) ) { *p = '\\'; } sep = '\\';#else sep = '/';#endif /* remove trailling separator */ while( strlen( psz_dir ) > 1 &&#if defined( WIN32 ) !( strlen(psz_dir)==3 && psz_dir[1]==':' && psz_dir[2]==sep ) &&#endif psz_dir[strlen( psz_dir ) -1 ] == sep ) { psz_dir[strlen( psz_dir ) -1 ] ='\0'; } /* remove double separator */ for( p = src = psz_dir; *src != '\0'; src++, p++ ) { if( src[0] == sep && src[1] == sep ) { src++; } *p = *src; } *p = '\0'; if( *psz_dir == '\0' ) { return s; } /* first fix all .. dir */ p = src = psz_dir; while( *src ) { if( src[0] == '.' && src[1] == '.' ) { src += 2; if( p <= &psz_dir[1] ) { continue; } p -= 2; while( p > &psz_dir[1] && *p != sep ) { p--; } } else if( *src == sep ) { if( p > psz_dir && p[-1] == sep ) { src++; } else { *p++ = *src++; } } else { do { *p++ = *src++; } while( *src && *src != sep ); } } *p = '\0';#ifdef HAVE_SYS_STAT_H if( stat( psz_dir, &stat_info ) == -1 || !S_ISDIR( stat_info.st_mode ) ) { return s; }#endif if( ( p_dir = opendir( psz_dir ) ) == NULL ) { fprintf( stderr, "cannot open dir (%s)", psz_dir ); return s; } /* remove traling / or \ */ for( p = &psz_dir[strlen( psz_dir) - 1]; p >= psz_dir && ( *p =='/' || *p =='\\' ); p-- ) { *p = '\0'; } for( ;; ) { mvar_t *f; /* parse psz_src dir */ if( ( p_dir_content = readdir( p_dir ) ) == NULL ) { break; } if( !strcmp( p_dir_content->d_name, "." ) ) { continue; } sprintf( tmp, "%s/%s", psz_dir, p_dir_content->d_name );#ifdef HAVE_SYS_STAT_H if( stat( tmp, &stat_info ) == -1 ) { continue; }#endif f = mvar_New( name, "set" ); mvar_AppendNewVar( f, "name", tmp );#ifdef HAVE_SYS_STAT_H if( S_ISDIR( stat_info.st_mode ) ) { mvar_AppendNewVar( f, "type", "directory" ); } else if( S_ISREG( stat_info.st_mode ) ) { mvar_AppendNewVar( f, "type", "file" ); } else { mvar_AppendNewVar( f, "type", "unknown" ); } sprintf( tmp, I64Fd, (int64_t)stat_info.st_size ); mvar_AppendNewVar( f, "size", tmp ); /* FIXME memory leak FIXME */#ifdef HAVE_CTIME_R ctime_r( &stat_info.st_mtime, tmp ); mvar_AppendNewVar( f, "date", tmp );#else mvar_AppendNewVar( f, "date", ctime( &stat_info.st_mtime ) );#endif#else mvar_AppendNewVar( f, "type", "unknown" ); mvar_AppendNewVar( f, "size", "unknown" ); mvar_AppendNewVar( f, "date", "unknown" );#endif mvar_AppendVar( s, f ); } return s;}static mvar_t *mvar_VlmSetNew( char *name, vlm_t *vlm ){ mvar_t *s = mvar_New( name, "set" ); vlm_message_t *msg; int i; if( vlm == NULL ) return s; if( vlm_ExecuteCommand( vlm, "show", &msg ) ) { return s; } for( i = 0; i < msg->i_child; i++ ) { /* Over media, schedule */ vlm_message_t *ch = msg->child[i]; int j; for( j = 0; j < ch->i_child; j++ ) { /* Over name */ vlm_message_t *el = ch->child[j]; vlm_message_t *inf, *desc; mvar_t *set; char psz[500]; int k; sprintf( psz, "show %s", el->psz_name ); if( vlm_ExecuteCommand( vlm, psz, &inf ) ) continue;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -