Example #1
0
function create_message_type($name, array $copyArgs, array $swapArgs, $serializable = false, $copyable = false)
{
    $allArgs = array_merge($copyArgs, $swapArgs);
    // Create the constructor parameter string. We have to do this specially
    // because copy constructed parameters can be passed as const references
    // while swapped members must be passed as plain references.
    $constructor_array = [];
    foreach ($copyArgs as $n => $t) {
        if (should_reference($t)) {
            array_push($constructor_array, "{$t} & {$n}");
        } else {
            array_push($constructor_array, "{$t} {$n}");
        }
    }
    foreach ($swapArgs as $n => $t) {
        array_push($constructor_array, "{$t} & {$n}");
    }
    $constructor_params = implode(CSL_SEP, $constructor_array);
    // The factory function takes an EventProcessor as its first input, so
    // put together the parameters for that.
    $factory_array = ['EventProcessor & __dest'];
    $factory_array = array_merge($factory_array, $constructor_array);
    $factory_params = implode(CSL_SEP, $factory_array);
    $allArgs = array_merge($copyArgs, $swapArgs);
    // Escape from PHP to start outputing the C++ code.
    ?>

class <?php 
    echo $name;
    ?>
 : public Message {
public:
    // members
<?php 
    foreach ($allArgs as $n => $t) {
        ?>
    <?php 
        echo $t;
        ?>
 <?php 
        echo $n;
        ?>
;
<?php 
    }
    ?>

private:
    // constructor
    <?php 
    echo $name;
    ?>
 ( <?php 
    echo $constructor_params;
    ?>
 ) :
        Message()
        // Copy constructed members
<?php 
    foreach ($copyArgs as $n => $t) {
        ?>
        , <?php 
        echo $n;
        ?>
( <?php 
        echo $n;
        ?>
 )
<?php 
    }
    ?>
    {
        // swapped members
<?php 
    foreach ($swapArgs as $n => $t) {
        ?>
        (this-><?php 
        echo $n;
        ?>
).swap(<?php 
        echo $n;
        ?>
);
<?php 
    }
    ?>
    }

<?php 
    if (count($constructor_array) > 0) {
        ?>
    // Default constructor
    <?php 
        echo $name;
        ?>
 ( void ) : Message() { }
<?php 
    }
    ?>

<?php 
    if ($copyable) {
        ?>
    <?php 
        echo $name;
        ?>
( <?php 
        echo $name;
        ?>
 & other ) {
<?php 
        foreach ($copyArgs as $n => $t) {
            ?>
        <?php 
            echo $n;
            ?>
 = other.<?php 
            echo $n;
            ?>
;
<?php 
        }
        foreach ($swapArgs as $n => $t) {
            ?>
        <?php 
            echo $n;
            ?>
.copy(other.<?php 
            echo $n;
            ?>
);
<?php 
        }
        ?>
    }
<?php 
    }
    // if copyable
    ?>

public:
    // Destructor
    virtual ~<?php 
    echo $name;
    ?>
() {}

    // type
    static constexpr off_t type = <?php 
    echo hash_name($name);
    ?>
;
    virtual off_t Type(void) const OVERRIDE_SPEC { return <?php 
    echo hash_name($name);
    ?>
; }
    virtual const char * TypeName(void) const OVERRIDE_SPEC { return "<?php 
    echo $name;
    ?>
"; }

    // To/From Json
<?php 
    if ($serializable) {
        ?>
    virtual void ToJson( Json::Value & dest ) const OVERRIDE_SPEC {
        dest = Json::Value(Json::objectValue);

<?php 
        foreach ($copyArgs as $n => $t) {
            ?>
        ::ToJson(<?php 
            echo $n;
            ?>
, dest["<?php 
            echo $n;
            ?>
"]);
<?php 
        }
        foreach ($swapArgs as $n => $t) {
            ?>
        ::ToJson(<?php 
            echo $n;
            ?>
, dest["<?php 
            echo $n;
            ?>
"]);
<?php 
        }
        ?>
    }

    virtual void FromJson ( const Json::Value & src ) OVERRIDE_SPEC {
        if( ! src.isObject() ) {
            throw new std::invalid_argument("Tried to construct <?php 
        echo $name;
        ?>
 message from non-object JSON");
        }

<?php 
        foreach ($allArgs as $n => $t) {
            ?>
        if( ! src.isMember("<?php 
            echo $n;
            ?>
") )
            throw new std::invalid_argument("JSON for message <?php 
            echo $name;
            ?>
 has no member for attribute <?php 
            echo $n;
            ?>
");
        ::FromJson(src["<?php 
            echo $n;
            ?>
"], <?php 
            echo $n;
            ?>
);
<?php 
        }
        ?>
    }

<?php 
    } else {
        ?>
    virtual void ToJson( Json::Value & dest ) const OVERRIDE_SPEC {
        FATAL("Message type <?php 
        echo $name;
        ?>
 is not serializable.");
    }

    virtual void FromJson ( const Json::Value & src ) OVERRIDE_SPEC {
        FATAL("Message type <?php 
        echo $name;
        ?>
 is not serializable.");
    }
<?php 
    }
    // it not serializable
    ?>

    // Constructor from JSON
    // This constructor has a bizarre signature on purpose as not to conflict
    // with messages that contain exactly 1 JSON value as their payload.
    // It is our hope that no sane individual would store 3 void pointers in a
    // message.
    <?php 
    echo $name;
    ?>
( const Json::Value & src, void * dummy1, void * dummy2, void * dummy3 ) {
        FromJson(src);
    }

    // friend delcarations
<?php 
    if (isset($message_debug_class)) {
        ?>
    friend class <?php 
        echo $message_debug_class;
        ?>
;
<?php 
    }
    ?>
    friend void <?php 
    echo $name;
    ?>
_Factory( <?php 
    echo $factory_params;
    ?>
 );

    // Factory function to build a <?php 
    echo $name;
    ?>
 object
    static void Factory( <?php 
    echo $factory_params;
    ?>
 ) {
        Message * __msg = (Message *) new <?php 
    echo $name;
    ?>
( <?php 
    echo args($allArgs);
    ?>
 );
        __dest.ProcessMessage(*__msg);
    }

<?php 
    if ($copyable) {
        ?>
    // Factory function to send a copy of the message
    static void Factory( EventProcessor & dest, <?php 
        echo $name;
        ?>
 & msg ) {
        Message * __msg = (Message *) new <?php 
        echo $name;
        ?>
( msg );
        dest.ProcessMessage(*__msg);
    }
<?php 
    }
    // if copyable
    ?>
}; // End of class <?php 
    echo $name;
    ?>

inline
void ToJson( const <?php 
    echo $name;
    ?>
 & src, Json::Value & dest ) {
    src.ToJson(dest);
}

inline
void FromJson( const Json::Value & src, <?php 
    echo $name;
    ?>
 & dest ) {
    dest.FromJson(src);
}


// Factory function to build <?php 
    echo $name;
    ?>
 objects
inline
void <?php 
    echo $name;
    ?>
_Factory( <?php 
    echo $factory_params;
    ?>
 ) {
    Message * __msg = (Message *) new <?php 
    echo $name;
    ?>
( <?php 
    echo args($allArgs);
    ?>
 );
    __dest.ProcessMessage(*__msg);
}

<?php 
}
Example #2
0
             $stmt->execute();
             $stmt->bindColumn($db_columnPass, $realPass);
             $stmt->bindColumn('scheme_class', $scheme_class);
             $stmt->fetch();
             $realPass = substr($realPass, 22, 64);
             if ($scheme_class === 'XenForo_Authentication_Core') {
                 $salt = substr($salt, 105, 64);
             } else {
                 $salt = false;
             }
         } else {
             die(Security::encrypt(json_encode(array('error' => true, 'code' => STATUS_INTERNAL_ERROR, 'text' => 'Bad hash!')), $key1));
         }
     }
 }
 $checkPass = hash_name($crypt, $realPass, $postPass, @$salt);
 if ($useantibrut) {
     $ip = getenv('REMOTE_ADDR');
     $time = time();
     $bantime = $time + 10;
     $stmt = $db->prepare("Select sip,time From sip Where sip='{$ip}' And time>'{$time}'");
     $stmt->execute();
     $row = $stmt->fetch(PDO::FETCH_ASSOC);
     $real = $row['sip'];
     if ($ip == $real) {
         $stmt = $db->prepare("DELETE FROM sip WHERE time < '{$time}';");
         $stmt->execute();
         exit(Security::encrypt(json_encode(array("error" => true, "code" => STATUS_BAD_LOGIN, "text" => "Timeout")), $key1));
     }
     if ($login !== $realUser) {
         $stmt = $db->prepare("INSERT INTO sip (sip, time)VALUES ('{$ip}', '{$bantime}')");
Example #3
0
    public function expand()
    {
        // Alias members so I don't go crazy trying to add $this-> to all of
        // them. I didn't know that you HAVE to have the $this->, even within
        // a class's method.
        $name =& $this->name;
        $parent =& $this->parent;
        $copyArgs =& $this->copyArgs;
        $swapArgs =& $this->swapArgs;
        $copyable =& $this->copyable;
        $serializable =& $this->serializable;
        $sep_deserial = $this->sep_deserial;
        $constructorArgs =& $this->constructorArgs;
        $myArgs =& $this->myArgs;
        $allCopy =& $this->allCopy;
        $allSwap =& $this->allSwap;
        ?>

// forward definition
class <?php 
        echo $name;
        ?>
;

// Defining the implementation class first.
class <?php 
        echo $name;
        ?>
Imp : public <?php 
        echo $parent->name;
        ?>
Imp {

protected:
    // members
<?php 
        foreach ($myArgs as $n => $t) {
            ?>
    <?php 
            echo $t;
            ?>
 <?php 
            echo $n;
            ?>
;
<?php 
        }
        ?>

public:
    // Constructor
    <?php 
        echo $name;
        ?>
Imp( <?php 
        echo $this->get_constructor_params();
        ?>
 ) :
        <?php 
        echo $parent->name;
        ?>
Imp( <?php 
        echo args($parent->constructorArgs);
        ?>
 )
        // copy constructed members
<?php 
        foreach ($copyArgs as $n => $t) {
            ?>
        , <?php 
            echo $n;
            ?>
( <?php 
            echo $n;
            ?>
 )
<?php 
        }
        ?>
    {
<?php 
        foreach ($swapArgs as $n => $t) {
            ?>
        this-><?php 
            echo $n;
            ?>
.swap(<?php 
            echo $n;
            ?>
);
<?php 
        }
        ?>
    }

<?php 
        if (count($constructorArgs) > 0) {
            ?>
    // Default constructor
    <?php 
            echo $name;
            ?>
Imp() : <?php 
            echo $parent->name;
            ?>
Imp() { }
<?php 
        }
        ?>

<?php 
        if ($copyable) {
            ?>
protected:

    // Protected copy constructor used for Clone
    <?php 
            echo $name;
            ?>
Imp( <?php 
            echo $name;
            ?>
Imp& fromMe ) : <?php 
            echo $parent->name;
            ?>
Imp( fromMe ) {
        // Copy my stuff
        // Copy-constructed stuff first
<?php 
            foreach ($copyArgs as $n => $t) {
                ?>
        this-><?php 
                echo $n;
                ?>
 = fromMe.<?php 
                echo $n;
                ?>
;
<?php 
            }
            ?>

        // Now swapped stuff (with explicit copies)
<?php 
            foreach ($swapArgs as $n => $t) {
                ?>
        this-><?php 
                echo $n;
                ?>
.copy( fromMe.<?php 
                echo $n;
                ?>
 );
<?php 
            }
            ?>
    }

public:
    // Clone method. Can create a copy of the object.
    virtual DataImp* Clone() OVERRIDE_SPEC {
        // Use copy constructor to create a new object that copies me
        return new <?php 
            echo $name;
            ?>
Imp( *this );
    }
<?php 
        }
        ?>

    // destructor
    virtual ~<?php 
        echo $name;
        ?>
Imp() {}

    // type
    static constexpr off_t _type_ = <?php 
        echo hash_name($name);
        ?>
;
    virtual const off_t Type(void) const OVERRIDE_SPEC {
        return <?php 
        echo hash_name($name);
        ?>
;
    }
    virtual const char * TypeName(void) const OVERRIDE_SPEC {
        return "<?php 
        echo $name;
        ?>
";
    }

<?php 
        if ($serializable) {
            ?>
    virtual void toJson( Json::Value & dest ) const OVERRIDE_SPEC {
        dest = Json::Value(Json::objectValue);

        // Serialize parent
        <?php 
            echo $parent->name;
            ?>
Imp::toJson(dest["|parent|"]);

        dest["|type|"] = (Json::Int64) _type_;

        // Store members
<?php 
            foreach ($myArgs as $n => $t) {
                ?>
        ToJson(<?php 
                echo $n;
                ?>
, dest["<?php 
                echo $n;
                ?>
"]);
<?php 
            }
            ?>
    }

    virtual void fromJson( const Json::Value & src ) OVERRIDE_SPEC {
        // Deserialize parent
        <?php 
            echo $parent->name;
            ?>
Imp::fromJson(src["|parent|"]);

        off_t jType = (off_t) src["|type|"].asInt64();

        FATALIF(jType != _type_, "Attempting to deserialize <?php 
            echo $name;
            ?>
 from JSON for different type "
            "with hash %llx", (unsigned long long) jType);

        // Deserialize members
<?php 
            foreach ($myArgs as $n => $t) {
                ?>
        FromJson(src["<?php 
                echo $n;
                ?>
"], <?php 
                echo $n;
                ?>
);
<?php 
            }
            ?>
    }
<?php 
        } else {
            ?>
    virtual void toJson( Json::Value & dest ) const OVERRIDE_SPEC {
        FATAL("Data type <?php 
            echo $name;
            ?>
 is not serializable.");
    }

    virtual void fromJson ( const Json::Value & src ) OVERRIDE_SPEC {
        FATAL("Data type <?php 
            echo $name;
            ?>
 is not serializable.");
    }
<?php 
        }
        // it not serializable
        ?>

    friend class <?php 
        echo $name;
        ?>
;
}; // End of class <?php 
        echo $name;
        ?>
Imp

// Front end class <?php 
        echo $name;
        ?>

class <?php 
        echo $name;
        ?>
 : public <?php 
        echo $parent->name;
        ?>
 {
public:
    // the type
    static const off_t type = <?php 
        echo hash_name($name);
        ?>
;

    // Constructor
    <?php 
        echo $name;
        ?>
( <?php 
        echo $this->get_constructor_params();
        ?>
 ) {
        this->data = new <?php 
        echo $name;
        ?>
Imp( <?php 
        echo args($constructorArgs);
        ?>
 );
    }

<?php 
        if (count($constructorArgs) > 0) {
            ?>
    // Default constructor
    <?php 
            echo $name;
            ?>
( void ) : <?php 
            echo $parent->name;
            ?>
( ) { }
<?php 
        }
        ?>

<?php 
        if ($copyable) {
            ?>
    // Copy constructor
    <?php 
            echo $name;
            ?>
( <?php 
            echo $name;
            ?>
 & o ) {
        copy(o);
    }

    // Copy assignment
    <?php 
            echo $name;
            ?>
 & operator = (<?php 
            echo $name;
            ?>
& o) {
        copy(o);
        return *this;
    }
<?php 
        }
        ?>

    // Move constructor
    <?php 
        echo $name;
        ?>
( <?php 
        echo $name;
        ?>
 && o ): <?php 
        echo $parent->name;
        ?>
()
    {
        swap(o);
    }

    // Access methods for all new data
<?php 
        foreach ($myArgs as $n => $t) {
            ?>
    <?php 
            echo $t;
            ?>
& get_<?php 
            echo $n;
            ?>
() {
        <?php 
            echo $name;
            ?>
Imp * myData = dynamic_cast< <?php 
            echo $name;
            ?>
Imp* >( this->data );
        FATALIF( myData == nullptr, "Trying to get member <?php 
            echo $n;
            ?>
 of an invalid or wrong type <?php 
            echo $name;
            ?>
!");
        return myData-><?php 
            echo $n;
            ?>
;
    }
<?php 
        }
        ?>

    virtual void toJson( Json::Value & dest ) const override {
        <?php 
        echo $name;
        ?>
Imp * myData = dynamic_cast< <?php 
        echo $name;
        ?>
Imp* >( this->data );
        if( myData != nullptr )
            myData->toJson(dest);
    }

    virtual void fromJson( const Json::Value & src ) override {
        if( this->data == nullptr ) {
            <?php 
        echo $name;
        ?>
Imp * myData = new <?php 
        echo $name;
        ?>
Imp;
            myData->fromJson(src);
            this->data = myData;
        }
        else {
            <?php 
        echo $name;
        ?>
Imp * myData = dynamic_cast< <?php 
        echo $name;
        ?>
Imp* >( this->data );
            FATALIF(myData == nullptr, "Trying to deserialize into invalid <?php 
        $name;
        ?>
 object!");
            myData->fromJson(src);
        }
    }

}; // End of class <?php 
        echo $name;
        ?>

inline
void ToJson( const <?php 
        echo $name;
        ?>
 & src, Json::Value & dest ) {
    src.toJson(dest);
}

<?php 
        if (!$sep_deserial) {
            ?>
inline
void FromJson( const Json::Value & src, <?php 
            echo $name;
            ?>
 & dest ) {
    dest.fromJson(src);
}
<?php 
        }
        // if not separate deserializer
        ?>

<?php 
    }