Example #1
0
int baseapp::update_device(uint dev, uint cpy, int state,  app_connection*n){
	
	if (state == em_offline){
		
		std::map<uint, app_connection*>::iterator it = m_devmap.find(dev);
		if(it != m_devmap.end()){
			server_info * s1 = (server_info*)it->second->get_context();
			server_info * s2 = (server_info*)n->get_context();
			
			//fixed bug
			if(s1->get_id() == s2->get_id()){
				m_devmap.erase(it);
			}
			else{
				log_out(log_warn, "update_device::from different server\n");
			}
		}
	}
	else{
		m_devmap[dev] = n;
	}
	
	ipaddr& peeraddr = n->get_peeraddr();
	
	log_out(log_debug, "update_device::appid(%d) device(%u) company(%u) state(%u) count(%d) from(%s)\n", 
		get_appid(), dev, cpy, state, m_devmap.size(), peeraddr.ip);
	return 0;
}
Example #2
0
int svrapp::cnt_disconnect(app_connection *n, int reason){

	realplay_info * rpif = (realplay_info*)n->get_context();
	m_cntmap.erase(rpif->get_id());
	
	log_out(log_error, "cnt_disconnect::realplay(%08X) appid(%u)\n", 
	rpif->get_id(), get_appid());
	
	handle_stop_realplay(rpif, "88");
	
	delete rpif;
	return 0;
}
Example #3
0
/*
{
    "cmd":"realpaly_start_notify",
    "data":{
        "token":"1234"
    }
}
*/
int svrapp::dev_realplay_start_notify(param_list * pl){
	
	log_out(log_debug, "dev_realplay_start_notify::appid(%u) %s\n", 
	get_appid(), pl->content);
	
	//reset stream context;
	stream_info * stmif  = (stream_info*)pl->n->get_context();	
	uint64 key64 = stmif->get_key64();
	delete stmif;
	pl->n->set_context(NULL);
	
	std::map<uint64, stream_info*>::iterator it = m_realplaymap.find(key64);
	if(it == m_realplaymap.end()){
		log_out(log_error, "dev_realplay_start_notify::no stream_info appid(%u) stmkey(%llX)\n", 
		get_appid(), key64);
		return -1;
	}
	
	pl->n->set_context(it->second);
	it->second->start_all();
	log_out(log_debug, "dev_realplay_start_notify::ok, starting\n");

	return 0;
}
Array Steam::get_recent_players()
{
	if ( SteamFriends() == NULL ) { return Array(); }
	Array uList;
	int list_size = SteamFriends()->GetCoplayFriendCount();
	for(int i=0;i<list_size;i++)
	{
		CSteamID uSteamID = SteamFriends()->GetCoplayFriend(i);
		if ( SteamFriends()->GetFriendCoplayGame(uSteamID) == get_appid() ) // played the same game
		{
			Ref<_SteamUser> nextUser = memnew( _SteamUser(uSteamID) );
			uList.push_back(nextUser);
		}
	}
	return uList;
}
void get_derived_permission(struct dentry *parent, struct dentry *dentry)
{
	struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);
	struct sdcardfs_inode_info *info = SDCARDFS_I(dentry->d_inode);
	struct sdcardfs_inode_info *parent_info= SDCARDFS_I(parent->d_inode);
	appid_t appid;

	/* By default, each inode inherits from its parent.
	 * the properties are maintained on its private fields
	 * because the inode attributes will be modified with that of
	 * its lower inode.
	 * The derived state will be updated on the last
	 * stage of each system call by fix_derived_permission(inode).
	 */

	inherit_derived_state(parent->d_inode, dentry->d_inode);

	/* Derive custom permissions based on parent and current node */
	switch (parent_info->perm) {
		case PERM_INHERIT:
			/* Already inherited above */
			break;
        case PERM_PRE_ROOT:
			/* Legacy internal layout places users at top level */
			info->perm = PERM_ROOT;
			info->userid = simple_strtoul(dentry->d_name.name, NULL, 10);
            if (sbi->options.sdfs_gid == AID_SDCARD_RW)
                info->d_gid = sbi->options.sdfs_gid;
            else
                info->d_gid = multiuser_get_uid(info->userid, sbi->options.sdfs_gid);
			break;
		case PERM_ROOT:
			/* Assume masked off by default. */
			if (!strcasecmp(dentry->d_name.name, "Android")) {
				/* App-specific directories inside; let anyone traverse */
				info->perm = PERM_ANDROID;
                info->d_under_android = true;
            }
			break;
		case PERM_ANDROID:
			if (!strcasecmp(dentry->d_name.name, "data")) {
				/* App-specific directories inside; let anyone traverse */
				info->perm = PERM_ANDROID_DATA;
			} else if (!strcasecmp(dentry->d_name.name, "obb")) {
				/* App-specific directories inside; let anyone traverse */
				info->perm = PERM_ANDROID_OBB;
				// FIXME : this feature will be implemented later.
				/* Single OBB directory is always shared */
                // ex. Fuse daemon..
                // node->graft_path = fuse->obb_path;
                // node->graft_pathlen = strlen(fuse->obb_path);
			} else if (!strcasecmp(dentry->d_name.name, "media")) {
				/* App-specific directories inside; let anyone traverse */
				info->perm = PERM_ANDROID_MEDIA;
			}
			break;
		/* same policy will be applied on PERM_ANDROID_DATA
		 * and PERM_ANDROID_OBB */
		case PERM_ANDROID_DATA:
		case PERM_ANDROID_OBB:
		case PERM_ANDROID_MEDIA:
			appid = get_appid(sbi->pkgl_id, dentry->d_name.name);
			if (appid != 0) {
				info->d_uid = multiuser_get_uid(parent_info->userid, appid);
			}
			break;
	}
}
Example #6
0
/*
{
	"serial":"",
	"cmd":"start_realpaly_req",
	"data":{
		"token":"",
		"channel":0,
		"sub_channel":0,
	}
}*/
int svrapp::start_realplay_reqx(param_list * pl){

	realplay_info * rpif = (realplay_info*)pl->n->get_context();
	if(!rpif){
		post_ack(pl->n, pl->ack_cmd, pl->serial, ERROR_NO_SUPPORT, "try again");
		log_out(log_error, "start_realplay_reqx::unknow error\n");
		return -1;
	}
	
	if(rpif->is_playing()){
		rpif->post_ack(pl->ack_cmd, pl->serial, ERROR_NO_SUPPORT, "is playing");
		log_out(log_error, "start_realplay_reqx::is playing\n");
		return -1;
	}
	
	stream_key  * stmkey = rpif->get_stream_key();
	uint64 key64 = rpif->get_key64();
	
	//find dev
	std::map<uint, app_connection*>::iterator it = m_devmap.find(stmkey->device_id);
	if(it == m_devmap.end()){
		log_out(log_error, "start_realpaly_req::device(%u) off line\n", stmkey->device_id);
		rpif->post_ack(pl->ack_cmd, pl->serial, ERROR_DEV_OFFLINE, "device is offline");
		return -1;
	}
	
	std::map<uint, app_connection*>::iterator it1 = m_cntmap.find(rpif->get_id());
	if(it1 == m_cntmap.end() ){
		m_cntmap[rpif->get_id()] = pl->n;
	}

	//判断是否已经在播放
	std::map<uint64, stream_info*>::iterator it0 = m_realplaymap.find(key64);
	if(it0 != m_realplaymap.end()){
		stream_info * stmif = it0->second;
		stmif->add(rpif->get_id(), pl->n);
		
		rpif->reset_resource();
		rpif->set_playing();
		rpif->post_ack(pl->ack_cmd, pl->serial, ERROR_OK, "ok");
		log_out(log_debug, "start_realpaly_req::appid(%d) stream(%llX) already playing, clients(%u)\n",
		get_appid(), key64, stmif->client_number());		
		return 0;
	}
	else{
		stream_info * stmif = new stream_info(stm_type, stmkey);
		m_realplaymap[key64] = stmif;
		stmif->add(rpif->get_id(), pl->n);
	}

	rpif->reset_resource();
	rpif->set_playing();
	
	///add realplay server
	char serverAddr[64] = {0};
	sprintf(serverAddr, "%s:%d",g_sdr->self_ipaddr.ip, g_sdr->self_ipaddr.port);
	cJSON_AddStringToObject(pl->jsdata, "server", serverAddr);
	cJSON_AddStringToObject(pl->jsdata, "transport_protocol", "tcp");
	
	//generate token
	char token[128] = {0};
	sprintf(token, "%08X%04X%04X", stmkey->device_id, stmkey->chn, stmkey->sub_chn);
	cJSON_DeleteItemFromObject(pl->jsdata, "token");
	cJSON_AddStringToObject(pl->jsdata, "token", token);
	
	
	//send request to mgr
	char new_serial[128] = {0};
	create_serial(rpif->get_id(), pl->serial, new_serial, sizeof(new_serial));
	char * out = cJSON_PrintUnformatted(pl->jsdata);
	log_out(log_debug, "start_realpaly_req::appid(%d) %s\n",get_appid(),  out);
		
	app_connection * dn = it->second;
	post_req(dn, pl->cmd, out, new_serial);
	free(out);
	return 0;
}