Esempio n. 1
0
void* rho_dispatch(struct conn *c, const char* path) {
  RouteRef route;

  if ( _shttpd_match_extension(c->uri,"css,js,html,htm,png,bmp,jpg") )
    return NULL;

  if ((route = _alloc_route(c->uri)) != NULL) {
    if (_parse_route(route)) {
      struct stat	st;
      //is this an actual file or folder
      if (_shttpd_stat(path, &st) != 0)
        return route;      
      //is this a folder
      if (S_ISDIR(st.st_mode)) {
        //check if there is controller.rb to run
        char	filename[FILENAME_MAX];
        int len = strlen(path);
        char* slash = path[len-1] == '\\' || path[len-1] == '/' ? "" : "/";
        _shttpd_snprintf(filename,sizeof(filename),"%s%s%s",path,slash,"controller.iseq");

        if ((_shttpd_stat(filename, &st) == 0)&&(!S_ISDIR(st.st_mode))) {
          printf("Run controller on this url: %s\n", c->uri);
          return route;
        }
      }
    }
    _free_route(route);
  }

  return NULL;
}
Esempio n. 2
0
void* rho_dispatch(struct conn *c, const char* path) {
  RouteRef route;
  
  if ( _shttpd_match_extension(c->uri,"css,js,html,htm,png,bmp,jpg") )
    return NULL;

#ifdef __SYMBIAN32__
  if ( strstr(_shttpd_known_http_methods[c->method].ptr, "GET" ) )
	  webview_set_current_location(c->uri);
#endif
  
  if ((route = _alloc_route(c->uri)) != NULL) {
    if (_parse_route(route)) {
      struct stat	st;
      //is this an actual file or folder
      if (_shttpd_stat(path, &st) != 0)
        return route;      
      //is this a folder
      if (S_ISDIR(st.st_mode)) {
        //check if there is controller.rb to run
        char	filename[FILENAME_MAX];
        int len = strlen(path);
        char* slash = path[len-1] == '\\' || path[len-1] == '/' ? "" : "/";
        _shttpd_snprintf(filename,sizeof(filename),"%s%s%s",path,slash,"controller.iseq");

        if ((_shttpd_stat(filename, &st) == 0)&&(!S_ISDIR(st.st_mode))) {
          RAWLOG_INFO1("Run controller on this url: %s", c->uri);
          return route;
        }
      }
    }
    _free_route(route);
  }

  return NULL;
}
Esempio n. 3
0
char* rho_resolve_url(char* url, const char* root,const char *index_names) {
	char path[URI_MAX];
	struct stat	st;
	char* tmp_url;
	char* ret;
	int full_len;

	char* full_path = strstr(url,"http://");
	if (full_path) {
		return full_path;
	}

	if (strlen(url) + strlen(root) >= sizeof(path)) {
		tmp_url = url;
	} else {
		_shttpd_snprintf(path, sizeof(path), "%s%s", root, url);
		if ( _shttpd_stat(path, &st) == -1 ) {
			tmp_url = url;				
		} else if ( S_ISDIR(st.st_mode) ) {
			tmp_url = _rho_resolve_index(url,path,index_names);
		} else {
			tmp_url = url;				
		}
	}
	
#if defined(__SYMBIAN32__) || defined(OS_WINDOWS) || defined(OS_WINCE)	
	full_len = strlen(get_home_url())+strlen(tmp_url)+1;
	ret = malloc(full_len);
	_shttpd_snprintf(ret, full_len, "%s%s", get_home_url(), tmp_url);	
#else		
	full_len = strlen(localhost)+strlen(tmp_url)+1;
	ret = malloc(full_len);
	_shttpd_snprintf(ret, full_len, "%s%s", localhost, tmp_url);	
#endif	

	free(tmp_url);
	
	return ret;
}
Esempio n. 4
0
static char* 
_rho_resolve_index(char* url,char* path,const char *index_names) {
	char filename[FILENAME_MAX];
	struct stat	st;

	//check if there is controller.rb
	int len = strlen(path);
	char* slash = path[len-1] == '\\' || path[len-1] == '/' ? "" : "/";
	_shttpd_snprintf(filename,sizeof(filename),"%s%s%s",path,slash,"controller.iseq");
	if ((_shttpd_stat(filename, &st) == 0)&&(!S_ISDIR(st.st_mode))) {
	  return url;
	}
	
	len = strlen(url);
	if (url[len-1]!='/') {
		char* tmp_url = malloc(len+2);
		_shttpd_snprintf(tmp_url,len+2,"%s/",url);
		free(url);
		return tmp_url;
	} 

	return url;				
}