Beispiel #1
0
/* check permissions and setup the upload transfer */
void upload_start(const char *nick, const char *hostname, const char *hostmask,
                  const char *filename, const char *remoteip, const char *remoteport, const char *bytes, char *token)
{
  upload *ul;
  char *uploaddir;
  char *tempstr;
  off_t len;

  updatecontext();

  len = atoull(bytes);
  if (invalid_upload(nick, hostmask, len))
    return;
  uploaddir = get_uploaddir(hostmask);
  if (uploaddir == NULL) {
    error_upload_start(nick, hostmask, "no uploaddir", "No uploaddir defined.");
    return;
  }
  if (disk_full(uploaddir) != 0) {
    error_upload_start(nick, hostmask, "disk full", "not enough free space on disk");
    return;
  }
  if (file_uploading(filename) != 0) {
    error_upload_start(nick, hostmask, "upload running", "I'm already getting this file");
    return;
  }
  if (max_uploads_reached() != 0) {
    error_upload_start(nick, hostmask, "too many uploads", "I'm already getting too many files");
    return;
  }
  ul = irlist_add(&gdata.uploads, sizeof(upload));
  l_initvalues(ul);
  ul->file = mystrdup(getfilename(filename));
  ul->con.family = (strchr(remoteip, ':')) ? AF_INET6 : AF_INET;
  ul->con.remoteaddr = mystrdup(remoteip);
  ul->con.remoteport = atoi(remoteport);
  ul->totalsize = len;
  ul->nick = mystrdup(nick);
  ul->hostname = mystrdup(hostname);
  ul->uploaddir = mystrdup(uploaddir);
  ul->net = gnetwork->net;
  qupload_started(gnetwork->net, nick);

  tempstr = getsendname(ul->file);
  ioutput(OUT_S|OUT_L|OUT_D, COLOR_YELLOW,
          "DCC Send Accepted from %s on %s: %s (%" LLPRINTFMT "dkB)",
          nick, gnetwork->name, tempstr,
          (ul->totalsize / 1024));
  mydelete(tempstr);
  if (gdata.mirc_dcc64)
    if (ul->totalsize > 0xFFFFFFFFL)
      ul->mirc_dcc64 = 1;

  if (ul->con.remoteport > 0U) {
    l_establishcon(ul);
  } else {
    /* Passive DCC */
    l_setup_passive(ul, token);
  }
}
/* search the DDC transfer a user wants to resume */
unsigned int t_find_resume(const char *nick, const char *filename, const char *localport, const char *bytes, char *token)
{
    char *sendnamestr;
    transfer *guess;
    transfer *tr;
    off_t len;

    guess = NULL;
    for (tr = irlist_get_head(&gdata.trans);
            tr;
            tr = irlist_get_next(tr)) {
        if ((tr->tr_status != TRANSFER_STATUS_LISTENING) && (tr->tr_status != TRANSFER_STATUS_RESUME))
            continue;
        if (strcasecmp(tr->caps_nick, nick))
            continue;

        /* the filename can be converted */
        if (guess == NULL)
            guess = tr;
        if (strcasestr(tr->xpack->file, filename))
            break;
        if (tr->con.localport == (unsigned)atoi(localport))
            break;
    }
    if (tr == NULL) {
        if (guess != NULL) {
            outerror(OUTERROR_TYPE_WARN,
                     "Guessed transfer that %s on %s tried to resume!",
                     nick, gnetwork->name);
            outerror(OUTERROR_TYPE_WARN,
                     "resume trying %s, %s, %d",
                     nick, filename, atoi(localport));
            tr = guess;
        } else {
            t_find_debug(nick, filename, localport);
            return 1;
        }
    }
    len = atoull(bytes);
    if (len >= tr->xpack->st_size) {
        notice(nick, "You can't resume the transfer at a point greater than the size of the file");
        ioutput(OUT_S|OUT_L|OUT_D, COLOR_YELLOW,
                "XDCC [%02i:%s on %s]: Resume attempted beyond end of file ( %" LLPRINTFMT "d >= %" LLPRINTFMT "d )",
                tr->id, tr->nick, gnetwork->name, len,
                tr->xpack->st_size);
        return 1;
    }
    t_setresume(tr, bytes);
    sendnamestr = getsendname(filename);
    if ((tr->tr_status == TRANSFER_STATUS_RESUME) && (token != NULL)) {
        privmsg_fast(nick, IRC_CTCP "DCC ACCEPT %s %s %s %s" IRC_CTCP, sendnamestr, localport, bytes, token); /* NOTRANSLATE */
    } else {
        privmsg_fast(nick, IRC_CTCP "DCC ACCEPT %s %s %s" IRC_CTCP, sendnamestr, localport, bytes); /* NOTRANSLATE */
    }
    mydelete(sendnamestr);
    ioutput(OUT_S|OUT_L|OUT_D, COLOR_YELLOW,
            "XDCC [%02i:%s on %s]: Resumed at %" LLPRINTFMT "dK", tr->id,
            tr->nick, gnetwork->name, tr->startresume/1024);
    return 0;
}
Beispiel #3
0
int64 MoneyStringToMoney(const std::string& moneyString)
{
    int64 money = 0;

    if (!(std::count(moneyString.begin(), moneyString.end(), 'g') == 1 ||
        std::count(moneyString.begin(), moneyString.end(), 's') == 1 ||
        std::count(moneyString.begin(), moneyString.end(), 'c') == 1))
        return 0; // Bad format

    Tokenizer tokens(moneyString, ' ');
    for (Tokenizer::const_iterator itr = tokens.begin(); itr != tokens.end(); ++itr)
    {
        std::string tokenString(*itr);
        size_t gCount = std::count(tokenString.begin(), tokenString.end(), 'g');
        size_t sCount = std::count(tokenString.begin(), tokenString.end(), 's');
        size_t cCount = std::count(tokenString.begin(), tokenString.end(), 'c');
        if (gCount + sCount + cCount != 1)
            return 0;

        uint64 amount = atoull(*itr);
        if (gCount == 1)
            money += amount * 100 * 100;
        else if (sCount == 1)
            money += amount * 100;
        else if (cCount == 1)
            money += amount;
    }

    return money;
}
Beispiel #4
0
ObjectGuid::LowType ChatHandler::extractLowGuidFromLink(char* text, HighGuid& guidHigh)
{
    int type = 0;

    // |color|Hcreature:creature_guid|h[name]|h|r
    // |color|Hgameobject:go_guid|h[name]|h|r
    // |color|Hplayer:name|h[name]|h|r
    char* idS = extractKeyFromLink(text, guidKeys, &type);
    if (!idS)
        return 0;

    switch (type)
    {
        case GUID_LINK_PLAYER:
        {
            guidHigh = HighGuid::Player;
            std::string name = idS;
            if (!normalizePlayerName(name))
                return 0;

            if (Player* player = ObjectAccessor::FindPlayerByName(name))
                return player->GetGUID().GetCounter();

            ObjectGuid guid = ObjectMgr::GetPlayerGUIDByName(name);
            if (guid.IsEmpty())
                return 0;

            return guid.GetCounter();
        }
        case GUID_LINK_CREATURE:
        {
            guidHigh = HighGuid::Creature;
            ObjectGuid::LowType lowguid = atoull(idS);
            return lowguid;
        }
        case GUID_LINK_GAMEOBJECT:
        {
            guidHigh = HighGuid::GameObject;
            ObjectGuid::LowType lowguid = atoull(idS);
            return lowguid;
        }
    }

    // unknown type?
    return 0;
}
Beispiel #5
0
    static bool HandleLfgGroupInfoCommand(ChatHandler* handler, char const* args)
    {
        Player* playerTarget;
        ObjectGuid guidTarget;
        std::string nameTarget;

        ObjectGuid parseGUID = ObjectGuid::Create<HighGuid::Player>(uint64(atoull(args)));

        if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget))
        {
            playerTarget = ObjectAccessor::FindPlayer(parseGUID);
            guidTarget = parseGUID;
        }
        else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget))
            return false;

        Group* groupTarget = NULL;

        if (playerTarget)
            groupTarget = playerTarget->GetGroup();
        else
        {
            PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER);
            stmt->setUInt32(0, guidTarget.GetCounter());
            PreparedQueryResult resultGroup = CharacterDatabase.Query(stmt);
            if (resultGroup)
                groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32());
        }
        if (!groupTarget)
        {
            handler->PSendSysMessage(LANG_LFG_NOT_IN_GROUP, nameTarget.c_str());
            handler->SetSentErrorMessage(true);
            return false;
        }

        ObjectGuid guid = groupTarget->GetGUID();
        std::string const& state = lfg::GetStateString(sLFGMgr->GetState(guid));
        handler->PSendSysMessage(LANG_LFG_GROUP_INFO, groupTarget->isLFGGroup(),
            state.c_str(), sLFGMgr->GetDungeon(guid));

        Group::MemberSlotList const& members = groupTarget->GetMemberSlots();

        for (Group::MemberSlotList::const_iterator itr = members.begin(); itr != members.end(); ++itr)
        {
            Group::MemberSlot const& slot = *itr;
            Player* p = ObjectAccessor::FindPlayer((*itr).guid);
            if (p)
                GetPlayerInfo(handler, p);
            else
                handler->PSendSysMessage("%s is offline.", slot.name.c_str());
        }

        return true;
    }
Beispiel #6
0
void sBook::ParseBookEntry(char * ptr, int line_no)
{
    char token[256];
    int token_no = 1;

    for (;;) {
       ptr = Parser.ParseToken(ptr, token);
	   if (token_no == 1) myBook[line_no].hash = atoull(token);
	   if (token_no == 2) myBook[line_no].move = atoi(token); 
	   if (token_no == 3) myBook[line_no].freq = atoi(token); 
	   token_no++;
	  
       if (*token == '\0') break;
   }
}
Beispiel #7
0
void sLearner::ParseLearnEntry(char * ptr, int line_no) 
{
  char token[256];
  int token_no = 1;

  for (;;) {
    ptr = Parser.ParseToken(ptr, token);
	if (token_no == 1) learnData[line_no].hash = atoull(token);
	if (token_no == 2) learnData[line_no].depth = atoi(token); 
	if (token_no == 3) learnData[line_no].val = atoi(token); 
	token_no++;
	  
    if (*token == '\0') break;
  }

}
    std::shared_ptr<Chip> AxessTMC13ReaderUnit::getChipInAir()
    {
        std::shared_ptr<Chip> chip;
        std::vector<unsigned char> cmd;
        cmd.push_back(static_cast<unsigned char>('s'));

        std::vector<unsigned char> tmpASCIIId = getDefaultAxessTMC13ReaderCardAdapter()->sendCommand(cmd);
        if (tmpASCIIId.size() > 0 && tmpASCIIId[0] != 'N')
        {
            unsigned long long l = atoull(BufferHelper::getStdString(tmpASCIIId));
            char bufTmpId[64];
            sprintf(bufTmpId, "%llx", l);
            chip = ReaderUnit::createChip(
				(d_card_type == CHIP_UNKNOWN ? CHIP_GENERICTAG : d_card_type),
                formatHexString(std::string(bufTmpId))
                );
        }

        return chip;
    }
void t_setresume(transfer * const t, const char *amt) {
   updatecontext();

   t->startresume = (off_t)atoull(amt);
   t->lastack = t->startresume;
   }