예제 #1
0
int64_t getBBGCIDForDevice(char *deviceModel){
    int64_t bbgcid = 0;
#define reterror(a ... ) {error(a); bbgcid = -1; goto error;}
    
    char *myjson = getBBCIDJson();
    
    jsmntok_t *tokens = NULL;
    int cnt = parseTokens(myjson, &tokens);
    if (cnt < 1) reterror("[TSSC] ERROR: parsing bbgcid.json failed!\n");
    
    
    jsmntok_t *device = objectForKey(tokens, myjson, deviceModel);
    if (!device) {
        reterror("[TSSC] ERROR: device \"%s\" is not in bbgcid.json, which means it's BasebandGoldCertID isn't documented yet.\nIf you own such a device please consider contacting @tihmstar ([email protected]) to get instructions how to contribute to this project.\n",deviceModel);
    }
    if (device->type == JSMN_PRIMITIVE) {
        warning("[TSSC] WARNING: A BasebandGoldCertID is not required for %s\n",deviceModel);
        bbgcid = 0;
    }else{
        device = device->value;
        char * buf = malloc(device->end - device->size +1);
        strncpy(buf, myjson+device->start,device->end - device->size);
        buf[device->end - device->size] = 0;
        bbgcid = atoll(buf);
        free(buf);
    }
    
error:
    if (myjson) free(myjson);
    if (tokens) free(tokens);
    return bbgcid;
#undef reterror
}
예제 #2
0
파일: link.c 프로젝트: stoicism2323/cReddit
/*
 * Details how to parse a RedditLink. Doesn't do much more then allocate a new
 * RedditLink and map it's members to key strings.
 */
RedditLink *redditGetLink(TokenParser *parser)
{
    RedditLink *link = redditLinkNew();

    TokenIdent ids[] = {
        ADD_TOKEN_IDENT_STRPARSE("selftext",      link->selftext, link->selftextEsc, link->wselftextEsc),
        ADD_TOKEN_IDENT_STRPARSE("title",         link->title,    link->titleEsc,    link->wtitleEsc),
        ADD_TOKEN_IDENT_STRING  ("id",            link->id),
        ADD_TOKEN_IDENT_STRING  ("permalink",     link->permalink),
        ADD_TOKEN_IDENT_STRING  ("author",        link->author),
        ADD_TOKEN_IDENT_STRING  ("url",           link->url),
        ADD_TOKEN_IDENT_INT     ("score",         link->score),
        ADD_TOKEN_IDENT_INT     ("downs",         link->downs),
        ADD_TOKEN_IDENT_INT     ("ups",           link->ups),
        ADD_TOKEN_IDENT_INT     ("num_comments",  link->numComments),
        ADD_TOKEN_IDENT_INT     ("num_reports",   link->numReports),
        ADD_TOKEN_IDENT_BOOL    ("is_self",       link->flags, REDDIT_LINK_IS_SELF),
        ADD_TOKEN_IDENT_BOOL    ("over_18",       link->flags, REDDIT_LINK_OVER_18),
        ADD_TOKEN_IDENT_BOOL    ("clicked",       link->flags, REDDIT_LINK_CLICKED),
        ADD_TOKEN_IDENT_BOOL    ("stickied",      link->flags, REDDIT_LINK_STICKIED),
        ADD_TOKEN_IDENT_BOOL    ("edited",        link->flags, REDDIT_LINK_EDITED),
        ADD_TOKEN_IDENT_BOOL    ("hidden",        link->flags, REDDIT_LINK_HIDDEN),
        ADD_TOKEN_IDENT_BOOL    ("distinguished", link->flags, REDDIT_LINK_DISTINGUISHED),
        ADD_TOKEN_IDENT_DATE    ("created_utc",   link->created_utc),
        {0}
    };

    parseTokens(parser, ids, link);

    return link;
}
예제 #3
0
파일: comment.c 프로젝트: Cotix/cReddit
/*
 * This code parses a JSON object to pull out a RedditComment. The 'getCommentReplies'
 * callback makes this all work, as it handles the case where 'replies' contains a
 * number of more RedditComment structures. That callback calls redditGetComment on
 * those objects in a recursive fashion to parse them.
 *
 * Beyond that, the list of TokenIdent's is fairly self-explainatory, it simply maps
 * the variables of a RedditComment to it's key in the JSON.
 */
RedditComment *redditGetComment(TokenParser *parser, RedditCommentList *list)
{
    RedditComment *comment = redditCommentNew();

    TokenIdent ids[] = {
        ADD_TOKEN_IDENT_FUNC    ("replies",       getCommentReplies),
        ADD_TOKEN_IDENT_STRING  ("author",        comment->author),
        ADD_TOKEN_IDENT_STRPARSE("body",          comment->body, comment->bodyEsc, comment->wbodyEsc),
        ADD_TOKEN_IDENT_STRPARSE("contentText",   comment->body, comment->bodyEsc, comment->wbodyEsc),
        ADD_TOKEN_IDENT_STRING  ("id",            comment->id),
        ADD_TOKEN_IDENT_STRING  ("link_id",       comment->linkId),
        ADD_TOKEN_IDENT_STRING  ("parent_id",     comment->parentId),
        ADD_TOKEN_IDENT_INT     ("ups",           comment->ups),
        ADD_TOKEN_IDENT_INT     ("downs",         comment->downs),
        ADD_TOKEN_IDENT_INT     ("num_reports",   comment->numReports),
        ADD_TOKEN_IDENT_BOOL    ("edited",        comment->flags, REDDIT_COMMENT_EDITED),
        ADD_TOKEN_IDENT_BOOL    ("score_hidden",  comment->flags, REDDIT_COMMENT_SCORE_HIDDEN),
        ADD_TOKEN_IDENT_BOOL    ("distinguished", comment->flags, REDDIT_COMMENT_DISTINGUISHED),
        ADD_TOKEN_IDENT_DATE    ("created_utc",   comment->created_utc),
        {0}
    };

    parseTokens(parser, ids, list, comment);

    return comment;
}
예제 #4
0
void HbWsiniParser::parseLine(const QString &line)
{
    // Split at whitespace
    QStringList tokens = line.split(QRegExp("\\s+"));
    
    // strip off square brackets from first token
    QString first = tokens[0].remove(QRegExp("[^A-Z0-9_]"));
    
    if (!first.isEmpty()) {
        QString number;
        // Keywords have screen mode number appended to them. Need to separate
        // the number part from the end
        int pos = first.lastIndexOf( QRegExp("[A-Z_]") );
        int lastCharacter = first.length()-1;
        if (pos >= 0 && pos < lastCharacter) {
            int numDigits = lastCharacter - pos;
            number = first.right(numDigits);
            first.chop(numDigits);
        }
        
        if (!number.isEmpty()){
            tokens.replace(0, number); // Number becomes first token
        }
        else{
            tokens.removeAt(0); // remove the keyword from the tokens
        }
        parseTokens(first, tokens);
    }
}
예제 #5
0
 void toHypergraph(std::string const& line, IMutableHypergraph<A>* phg, std::size_t lineNum = 0) const {
   Strings words = parseTokens(line, (ParseTokensOptions const&)*this);
   SDL_DEBUG(Hypergraph.HgConvertString, lineNum << ": " << printer(words, Util::RangeSep(" ", "", "")));
   SDL_INFO(Hypergraph.HgConvertString, lineNum << ": len=" << words.size());
   phg->clear(properties());
   assert(phg->storesArcs());
   assert(phg->getVocabulary());
   stringToHypergraph(words, phg);
 }
예제 #6
0
ModelLoaderOBJ::LINES ModelLoaderOBJ::getLines(const FileText::LINES &lines) {
	LINES result;
	
	for (FileText::LINES::const_iterator i = lines.begin();
	     i != lines.end();
	     ++i) {
		result.push_back(parseTokens(*i));
	}
	
	return result;
}
예제 #7
0
void LCDServer::readSocket()
{
    QTcpSocket *socket = dynamic_cast<QTcpSocket*>(sender());
    m_lastSocket = socket;

    while(socket->canReadLine())
    {
        QString incoming_data = socket->readLine();
        incoming_data = incoming_data.replace( QRegExp("\n"), "" );
        incoming_data = incoming_data.replace( QRegExp("\r"), "" );
        incoming_data.simplified();
        QStringList tokens = parseCommand(incoming_data);
        parseTokens(tokens, socket);
    }
}
예제 #8
0
std::unique_ptr<QueryNode> SearchQueryParser::parseQuery(const QString& query,
                                         const QStringList& searchColumns,
                                         const QString& extraFilter) const {
    auto pQuery(std::make_unique<AndNode>());

    if (!extraFilter.isEmpty()) {
        pQuery->addNode(std::make_unique<SqlNode>(extraFilter));
    }

    if (!query.isEmpty()) {
        QStringList tokens = query.split(" ");
        parseTokens(tokens, searchColumns, pQuery.get());
    }

    return std::move(pQuery);
}
예제 #9
0
SkeletonParser::SkeletonParser(const std::vector<std::string>& _tokenList) : strList(_tokenList), numOpenCurlies(0){
	numBallJoints = 0;
	for(uint i = 0; i < strList.size(); i++){
		auto token = Token(strList[i]);
		tokenList.push_back(token);
	}

	keywordTypeMap["balljoint"] = ballJointToken;
	keywordTypeMap["offset"]	= offsetToken;
	keywordTypeMap["boxmin"]	= boxminToken;
	keywordTypeMap["boxmax"]	= boxMaxToken;
	keywordTypeMap["rotxlimit"] = rotXLimitToken;
	keywordTypeMap["rotylimit"] = rotYLimitToken;
	keywordTypeMap["rotzlimit"] = rotZLimitToken;
	keywordTypeMap["pose"]		= poseToken;

	parseTokens(tokenList);
	//printTree();
}
예제 #10
0
/**
 * Called when authorization is finished
 */
void OAuthTwitter::finishedAuthorization()
{
    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    if (reply) {
        if (reply->error() == QNetworkReply::NoError) {
            QByteArray response = reply->readAll();
            parseTokens(response);

            emit authorizeXAuthFinished();
        } else {
            //dump error
            qDebug() << "Network Error: " << reply->error();
            qDebug() << "Response error: " << reply->readAll();
            emit authorizeXAuthError();

        }
        reply->deleteLater();
    }
}
예제 #11
0
파일: parser.cpp 프로젝트: dpacbach/CAStle
ExprConstSP Parser::parse(const std::string& source)
{
    if (scanners.empty())
        buildScanners(scanners, sBuilder);
    std::vector<token> tokens;
    stopLocation = source.begin();
    bool success = m_tokenizer->tokenize_priority(source, scanners, tokens);
    if (!success)
    {
        stopLocation = m_tokenizer->stop_location();
        return ExprConstSP();
    }
    std::vector<Command> commands;
    if (!parseTokens(tokens, commands))
        return ExprConstSP();
    for (std::vector<Command>::const_iterator it = commands.begin(); it != commands.end(); ++it)
    {
        //cout << endl << (*it).getNodeName() << ",  " << (*it).getNodeType() << ",  " << (*it).getNumberOfChildren();
    }
    return buildExpression(commands);
}
예제 #12
0
void Controller::loadController(std::string fileName)
	{		
		std::fstream fs;
		std::string line;

		fs.open(fileName, std::fstream::in);


		if (fs.is_open())
		{
			while(!fs.eof())
			{
				std::getline(fs, line);
				if (!line.empty())
				{
					this->addData(parseTokens(line));
				}

			}
			fs.close();
		}
	}
예제 #13
0
/**
 *  Gets access tokens for user entered pin number
 *  @param pin entered pin number
 */
void OAuthTwitter::requestAccessToken(const QString& pin)
{
    Q_ASSERT(m_netManager != 0);

    QUrl url(TWITTER_ACCESS_TOKEN_URL);
	QUrlQuery query;
    query.addQueryItem("oauth_verifier", pin.toLatin1().toPercentEncoding());
	url.setQuery(query);

    QByteArray oauthHeader = generateAuthorizationHeader(url, OAuth::POST);

    QEventLoop q;
    QTimer t;
    t.setSingleShot(true);

    connect(&t, SIGNAL(timeout()), &q, SLOT(quit()));

    QNetworkRequest req(url);
    req.setRawHeader(AUTH_HEADER, oauthHeader);
    req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

    QNetworkReply *reply = m_netManager->post(req, QByteArray());
    connect(reply, SIGNAL(finished()), &q, SLOT(quit()));
    connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(error()));

    t.start(5000);
    q.exec();

    if(t.isActive()){
        QByteArray response = reply->readAll();
        parseTokens(response);
        reply->deleteLater();

        emit authorizePinFinished();
    } else {
        qDebug() << "Timeout";
    }
}
예제 #14
0
SkinParser::SkinParser(const std::vector<std::string>& _tokenList, tree<BallJoint>& _tree, int _numJoints) : strList(_tokenList){
	
	numJoints = _numJoints;
	skelTree = _tree;
	model = Model(_tree, numJoints);
	output.open("output.txt", std::ofstream::out);
	
	for(uint i = 0; i < strList.size(); i++){
		auto token = Token(strList[i]);
		tokenList.push_back(token);
	}
	
	keywordMap["positions"] = positionsKeyword;
	keywordMap["normals"] = normalsKeyword;
	keywordMap["skinweights"] = skinWeightsKeyword;
	keywordMap["triangles"] = trianglesKeyword;
	keywordMap["bindings"] = bindingsKeyword;
	keywordMap["matrix"] = matrixKeyword;

	parseTokens(tokenList);
	model.generateTransforms();
	model.weightVertices();
}
예제 #15
0
/**
 *  Starts PIN based OAuth authorization
 */
void OAuthTwitter::authorizePin()
{
    Q_ASSERT(m_netManager != 0);

    QUrl url(TWITTER_REQUEST_TOKEN_URL);

    QByteArray oauthHeader = generateAuthorizationHeader(url, OAuth::POST);

    QNetworkRequest req(url);
    req.setRawHeader(AUTH_HEADER, oauthHeader);
    req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

    //enters event loop, simulate blocking io
    QEventLoop q;
    QTimer t;
    t.setSingleShot(true);
    connect(&t, SIGNAL(timeout()), &q, SLOT(quit()));

    QNetworkReply *reply = m_netManager->post(req, QByteArray());
    connect(reply, SIGNAL(finished()), &q, SLOT(quit()));
    connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(error()));

    t.start(5000);
    q.exec();

    if (t.isActive()) {
        t.stop();
        QByteArray response = reply->readAll();
        parseTokens(response);

        reply->deleteLater();
        requestAuthorization();

    } else {
        qDebug() << "Timeout";
    }
}
예제 #16
0
파일: main.c 프로젝트: Jirmi/tsschecker
int main(int argc, const char * argv[]) {
    
    dbglog = 1;
    idevicerestore_debug = 0;
    save_shshblobs = 0;
    int optindex = 0;
    int opt = 0;
    long flags = 0;
    
    
    char *device = 0;
    char *ios = 0;
    char *buildmanifest = 0;
    char *ecid = 0;
    
    if (argc == 1){
        cmd_help();
        return -1;
    }
    while ((opt = getopt_long(argc, (char* const *)argv, "d:i:e:m:hsbo", longopts, &optindex)) > 0) {
        switch (opt) {
            case 'h': // long option: "help"; can be called as short option
                cmd_help();
                return 0;
            case 'd': // long option: "device"; can be called as short option
                device = optarg;
                break;
            case 'i': // long option: "ios"; can be called as short option
                ios = optarg;
                break;
            case 'e': // long option: "ecid"; can be called as short option
                ecid = optarg;
                break;
            case 'b': // long option: "no-baseband"; can be called as short option
                flags |= FLAG_NO_BASEBAND;
                break;
            case 's': // long option: "save"; can be called as short option
                save_shshblobs = 1;
                break;
            case 'o': // long option: "ota"; can be called as short option
                flags |= FLAG_OTA;
                break;
            case '1': // only long option: "list-devices"
                flags |= FLAG_LIST_DEVICES;
                break;
            case '2': // only long option: "list-ios"
                flags |= FLAG_LIST_IOS;
                break;
            case 'm': // long option: "build-manifest"; can be called as short option
                flags |= FLAG_BUILDMANIFEST;
                buildmanifest = optarg;
                break;
            case '4': // only long option: "print-tss-request"
                print_tss_request = 1;
                break;
            case '5': // only long option: "print-tss-response"
                print_tss_response = 1;
                break;
            case '6': // only long option: "beta"
                flags |= FLAG_BETA;
                break;
            case '7': // only long option: "nocache"
                nocache = 1;
                break;
            default:
                cmd_help();
                return -1;
        }
    }
    int err = 0;
    int isSigned = 0;
    char *firmwareJson = NULL;
    jsmntok_t *firmwareTokens = NULL;
    int64_t ecidNum = 0;
#define reterror(code,a ...) {error(a); err = code; goto error;}
    
    if (ecid) {
        if ((ecidNum = parseECID(ecid)) <0){
            reterror(-7, "[TSSC] ERROR: manually specified ecid=%s, but parsing failed\n",ecid);
        }else{
            info("[TSSC] manually specified ecid to use, parsed \"%s\" to dec:%lld hex:%llx\n",ecid,ecidNum,ecidNum);
        }
    }
    
    
    
    firmwareJson = (flags & FLAG_OTA) ? getOtaJson() : getFirmwareJson();
    if (!firmwareJson) reterror(-6,"[TSSC] ERROR: could not get firmware.json\n");
    
    int cnt = parseTokens(firmwareJson, &firmwareTokens);
    if (cnt < 1) reterror(-2,"[TSSC] ERROR: parsing %s.json failed\n",(flags & FLAG_OTA) ? "ota" : "firmware");
    
    if (flags & FLAG_LIST_DEVICES) {
        printListOfDevices(firmwareJson, firmwareTokens);
    }else if (flags & FLAG_LIST_IOS){
        if (!device) reterror(-3,"[TSSC] ERROR: please specify a device for this option\n\tuse -h for more help\n");
        if (!checkDeviceExists(device, firmwareJson, firmwareTokens, (flags & FLAG_OTA))) reterror(-4,"[TSSC] ERROR: device %s could not be found in devicelist\n",device);
        
        printListOfiOSForDevice(firmwareJson, firmwareTokens, device, (flags & FLAG_OTA));
    }else{
        //request ticket
        if (buildmanifest) {
            if (device && !checkDeviceExists(device, firmwareJson, firmwareTokens, (flags & FLAG_OTA))) reterror(-4,"[TSSC] ERROR: device %s could not be found in devicelist\n",device);
            
            isSigned = isManifestSignedForDevice(buildmanifest, &device, ecidNum, !(flags & FLAG_NO_BASEBAND), &ios);

        }else{
            if (!device) reterror(-3,"[TSSC] ERROR: please specify a device for this option\n\tuse -h for more help\n");
            if (!ios) reterror(-5,"[TSSC] ERROR: please specify an iOS version for this option\n\tuse -h for more help\n");
            if (!checkFirmwareForDeviceExists(device, ios, firmwareJson, firmwareTokens, (flags & FLAG_OTA))) reterror(-6, "[TSSC] ERROR: either device %s does not exist, or there is no iOS %s for it.\n",device,ios);
            
            isSigned = isVersionSignedForDevice(firmwareJson, firmwareTokens, ios, device, ecidNum, (flags & FLAG_OTA), !(flags & FLAG_NO_BASEBAND), (flags & FLAG_BETA));
        }
        
        printf("\niOS %s for device %s %s being signed!\n",ios,device, (isSigned) ? "IS" : "IS NOT");
    }
    
    
    
error:
    if (firmwareJson) free(firmwareJson);
    if (firmwareTokens) free(firmwareTokens);
    return err ? err : isSigned;
#undef reterror
}