Getting Serial number in NETrender



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/10/2009 at 01:28, xxxxxxxx wrote:

    I can only speak for myself, but I and most others keep it simple.
    If a user have no license for the plugin based on a main app serial
    (C4D) they get no support from me for NET (Server and Client).

    It makes life easier both for me, but most of all, for my customers.
    Very little to gain financially by making things more complicated
    to install.
    My experience is that renderfarms of dignity do buy a license.

    Cheers
    Lennart



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/10/2009 at 02:44, xxxxxxxx wrote:

    hi Lennart,
    the user has a license for his main app serial and it works.. it kust occured since he wants to create an animation and noticed that my plugin doesnt register when using netrender..

    now i need to know what to do, so that he can use it with netrenderer. i am thinking of making a special node price but i was wondering how to make license test with netrenderer. does it just return another number here:
    GeGetSerialInfo(SERIAL_CINEMA4D, &serial;);
    serial.nr

    ??

    and if so, which number is passed? the serial of netrenderer??

    my problem is that i dont have netrenderer and so i have no clue how to check this..

    thanks and cheers,
    ello



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/10/2009 at 03:43, xxxxxxxx wrote:

    It seems that GeGetSerialInfo() is not working in NET. Please use the SNHookClass class for serialization in NET. SNCheck() passes the NET serial to you.

    cheers,
    Matthias



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/10/2009 at 04:00, xxxxxxxx wrote:

    thank you matthias! i'll try that..

    btw, is there a way for me to check out if it works, without having the net renderer?? i guess not?

    cheers and thanks,
    ello



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/10/2009 at 05:00, xxxxxxxx wrote:

    You should get the serial (11 digits) with:
    SysGetUserInfo(0); // for all serialized versions
    except the MultiLicense version where you use:
    SysGetUserInfo(6);

    You check version by ie;
    if(GeGetVersionType()&VERSION;_CINEMA4D)
    if(GeGetVersionType()&VERSION;_SERVER)
    if(GeGetVersionType()&VERSION;_SAVABLEDEMO)
    if(GeGetVersionType()&VERSION;_SAVABLEDEMO_ACTIVE),etc

    I guess you need to ask someone with NET to test for you.

    Cheers
    Lennart



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/10/2009 at 11:48, xxxxxxxx wrote:

    is there any snippet that simply prints out the serial using SNHookClass ? I am not able to understand how the example in the doc is working and the search i did here gave me something much more complex by kuroyume, which i dindt understand by any means :( ..

    would be cool if someone could help me with this, i just need that first 11 digit, no encryption or such stuff..

    cheers,
    ello



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/10/2009 at 11:51, xxxxxxxx wrote:

    Check out the SDK examples. There is an example SNHook.

    cheers,
    Matthias



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/10/2009 at 12:45, xxxxxxxx wrote:

    thats what i was reffering to, when speaking of the docs...
    i just dont manage to get an idea where i can get the NET licensenumber there...

    i have set up this code and now i dont know how to go on to get the 11 digits of the NET license :)

    > `

      
    \>  #include <c4d.h>  
    \>  #include <string.h>  
    \>  #include "lib_sn.h"  
    \>    
    \>  const LONG MY_SERIAL_ID = 8564886;  
    \>    
    \>  class serialTest : SNHookClass  
    \>  {  
    \>  private:  
    \>       const String title;  
    \>  public:  
    \>       serialTest() : title ("serial test") {}  
    \>       Bool Register(LONG id, LONG flags)  
    \>       {  
    \>            GePrint("starting serialTest...");  
    \>            return TRUE;  
    \>       }  
    \>      virtual LONG SNCheck(const String &c4dsn;,const String &sn;,LONG regdate,LONG curdate)  
    \>      {  
    \>        // ...  
    \>        return SN_WRONGNUMBER;  
    \>      }  
    \>    
    \>      virtual const String& GetTitle()  
    \>      {  
    \>        return title;  
    \>      }  
    \>  };  
    \>    
    \>  static serialTest* serial = NULL;  
    \>    
    \>  Bool RegisterSerialTest()  
    \>  {  
    \>      serial = gNew serialTest;  
    \>      return serial->Register(MY_SERIAL_ID, SNFLAG_OWN);  
    \>  }  
    \>    
    \>  Bool PluginStart(void)  
    \>  {  
    \>       SerialInfo serial;  
    \>       GeGetSerialInfo(SERIAL_CINEMA4D,&serial;);  
    \>       GePrint("Serial:" + serial.nr);  
    \>      return TRUE;  
    \>  }  
    \>    
    \>  void FreeMySerial(void)  
    \>  {  
    \>       gDelete(serial);  
    \>  }  
    \>    
    \>  void PluginEnd(void)  
    \>  {  
    \>  }  
    \>    
    \>  Bool PluginMessage(LONG id, void *data)  
    \>  {  
    \>      switch (id)  
    \>      {  
    \>          case C4DPL_INIT_SYS:  
    \>              if (!resource.Init()) return FALSE; // don't start plugin without resource  
    \>                 if (!RegisterSerialTest()) return FALSE;  
    \>              return TRUE;  
    \>          case C4DMSG_PRIORITY:  
    \>              return TRUE;  
    \>        case C4DPL_ENDACTIVITY:  
    \>          FreeMySerial(); return TRUE;  
    \>      }  
    \>      return FALSE;  
    \>  }  
    \>  
    

    `

    cheers,
    ello



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/10/2009 at 13:06, xxxxxxxx wrote:

    for example, where do i get regdate and curdate from to pass it to SNCheck??
    or generally, how do i call SNCheck and how do i get the NET Number from it?



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/10/2009 at 14:45, xxxxxxxx wrote:

    LONG SNCheck(const String& c4dsn, const String& sn, LONG regdate, LONG curdate)

    SNCheck is called for you when you call Register(). Here's my entire Main.cpp with SNHookClass. Note that I donot check the serial number when running Demo, Net, Server.

    > // Includes \> #ifdef MACOS \>      #include "Rijndael_Mac.h" \> #else \>      #include "Rijndael.h" \> #endif \> #include "c4d.h" \> #include "lib_sn.h" \> #include "general.h" \> \> // Size of serial number string \> #define ENTRY_SIZE                    17 \> \> // KDZSerial: Serial Number Hook Class \> class KDZSerial : public SNHookClass \> { \>      private: \>           // Data \>           const String     SNPluginName; \>           // Methods \>           // - KDZSerial.checkSerial \>           //\*---------------------------------------------------------------------------\* \>           Bool checkSerial(const String& c4dsn, const String& sn) \>           //\*---------------------------------------------------------------------------\* \>           { \>                // Key is 11-Digit C4D SN + 5-Char PluginCode + NullTerminator \>                char key[ENTRY_SIZE]; \>                c4dsn.GetCString(&key;[0], c4dsn.GetCStringLen()+1L, St7bit); \>                // Example \>                key[11] = 'x'; \>                key[12] = 'x'; \>                key[13] = 'x'; \>                key[14] = 'x'; \>                key[15] = 'x'; \>                key[16] = 0; \> \>                // Encrypt plugin serial no. using AES \>                char dout[ENTRY_SIZE] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; \>                // One block testing \>                CRijndael oRijndael; \>                if (!oRijndael.MakeKey(&key;[0], "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16, 16)) \>                { \>                     MessageDialog(GeLoadString(PDRERR_SNMAKEKEY)); \>                     return FALSE; \>                } \>                char din[ENTRY_SIZE]; \>                memcpy(&din;[0], &key;[0], ENTRY_SIZE); \>                if (!oRijndael.EncryptBlock(din, dout)) \>                { \>                     MessageDialog(GeLoadString(PDRERR_SNENCRYPTION)); \>                     return FALSE; \>                } \>                dout[16] = 0;     // Null-terminate \> \>                UINT     i; \>                UCHAR     val; \>                // Convert to AlphaNumerics for user serial number entry \>                for (i = 0; i != 16; ++i) \>                { \>                     val =     (UCHAR)dout[i]; \>                     // Beyond AlphaNumerics \>                     if (val > 122)                         val /= 3; \>                     // Below AlphaNumberics \>                     if (val < 48)                         val += 48; \>                     // Between numerals and UC Alpha \>                     if ((val > 57) && (val < 65))     val += 24; \>                     // Between UC Alpha and LC Alpha \>                     if ((val > 90) && (val < 97))     val += 12; \>                     dout[i] =     (char)val; \>                } \>                dout[16] = 0;     // Null-terminate \> \>                sn.GetCString(&key;[0], sn.GetCStringLen()+1L, St7bit); //ENTRY_SIZE, St7bit); \>                // Check sn against Encrypted-AlphaNumericized dout \>                for (i = 0; i != 16; ++i) \>                { \>                     //GePrint("key["+LongToString(i)+"]=\'"+LongToString(key[i])+"\' == chk["+LongToString(i)+"]=\'"+LongToString(dout[i])+"\'"); \>                     if (key[i] != dout[i]) \>                     { \>                          MessageDialog(GeLoadString(PDRERR_SNINVALID)); \>                          return FALSE; \>                     } \>                } \>                return TRUE; \>           } \>      public: \>           // Data \>           // - mode = 0 (not registered/not demo), 1 (demo), 2 (registered) \>           UCHAR               mode; \>           LONG               time; \>           // Methods \>           // - Constructor \>           //\*---------------------------------------------------------------------------\* \>           KDZSerial() : SNPluginName("PipeDream") \>           //\*---------------------------------------------------------------------------\* \>           { \>                mode =               0; \>           } \>           // - SNHookClass.SNCheck \>           //\*---------------------------------------------------------------------------\* \>           LONG SNCheck(const String& c4dsn, const String& sn, LONG regdate, LONG curdate) \>           //\*---------------------------------------------------------------------------\* \>           { \>                if (!sn.Content())     return SN_WRONGNUMBER; \> \>                // Demo mode (14 day trial) \>                if (sn.GetLength() == 4L) \>                { \>                     // Case-insensitive serial number 'demo' \>                     if (sn.LexCompare("DEMO"))     return SN_WRONGNUMBER; \> \>                     if (!regdate) \>                     { \>                          mode =     1; \>                          return SN_OKAY; \>                     } \> \>                     // Calculate timeout of Demo or Beta modes \>                     LONG timeout =          14L - (curdate - regdate); \>                     if (timeout < 0L)     return SN_EXPIRED; \>                     time =                    timeout; \>                     mode =                    1; \>                     if (timeout <= 14L)     return SN_EXPIRE_14 - timeout; \>                     return SN_OKAY; \>                } \>                // Registered user \>                else if (sn.GetLength() == 16L) \>                { \>                     if (checkSerial(c4dsn, sn)) \>                     { \>                          mode =     2; \>                          return SN_OKAY; \>                     } \>                } \> #ifdef     C4D_R11 \>                // Multi-License Server \>                else \>                { \>                     // Check for R11 Multi-License \>                     SerialInfo     mlsn; \>                     GeGetSerialInfo(SERIAL_MULTILICENSE, &mlsn;); \>                     if (mlsn.nr.Content()) \>                     { \>                          //-------------------------------------------------------------------------------- \>                          // Note that we also need to skip over the extra data added to the front of the \>                          // plugin's license key (11 digits/characters and a dash)... \>                          //-------------------------------------------------------------------------------- \>                          String     plug_sn =     sn; \>                          LONG dashPos; \>                          if (plug_sn.FindFirst("-", &dashPos;, 0L)) \>                          { \>                               plug_sn = plug_sn.SubStr(dashPos+1L, plug_sn.GetLength()-dashPos-1L); \>                               if (checkSerial(mlsn.nr, plug_sn)) \>                               { \>                                    mode =     2; \>                                    return SN_OKAY; \>                               } \>                          } \>                     } \>                } \> #else \>                else     MessageDialog(GeLoadString(PDRERR_SNSIZE)); \> #endif \> \>                return SN_WRONGNUMBER; \>           } \>           // - SNHookClass.GetTitle \>           //\*---------------------------------------------------------------------------\* \>           const String& GetTitle() \>           //\*---------------------------------------------------------------------------\* \>           { \>                return SNPluginName; \>           } \> }; \> \> static KDZSerial\* kdzSerial =     NULL; \> \> //\*---------------------------------------------------------------------------\* \> Bool RegisterKDZSerial() \> //\*---------------------------------------------------------------------------\* \> { \>      kdzSerial =          gNew KDZSerial(); \>      if (!kdzSerial)     return ErrorException::Throw(GeLoadString(PDRERR_MEMORY), "main.RegisterKDZSerial.kdzSerial"); \>      return kdzSerial->Register(ID_PIPEDREAMOBJ, SNFLAG_OWN); \> } \> //\*---------------------------------------------------------------------------\* \> void FreeKDZSerial() \> //\*---------------------------------------------------------------------------\* \> { \>      gDelete(kdzSerial); \> } \> \> \> // Plugin Functions ================================================================================================== \> \> // Declare Global Plugin Registrants \> Bool     RegisterPipeDreamObj(); \> Bool     RegisterPipeDreamTag(); \> \> //\*---------------------------------------------------------------------------\* \> Bool PluginStart() \> //\*---------------------------------------------------------------------------\* \> { \>      Bool     network =     FALSE; \>      LONG     vtype =          GeGetVersionType(); \>      if ((vtype & VERSION_SERVER) || (vtype & VERSION_NET))     network = TRUE; \> #ifdef     C4D_R11 \>      if (vtype & VERSION_DEMO)                                                       GePrint("C4D Demo"); \>      else if (vtype & (VERSION_SAVABLEDEMO|VERSION_SAVABLEDEMO_ACTIVE))     GePrint("C4D Savable Demo"); \>      else if (vtype & VERSION_SERVER)                                             GePrint("C4D Server"); \>      else if (vtype & VERSION_NET)                                                  GePrint("C4D Net"); \>      else \>      { \>           // serial number check \>           if (!(kdzSerial && kdzSerial->mode)) return FALSE; \>      } \> #else \>      if (!((vtype & VERSION_DEMO) || network)) \>      { \>           // serial number check \>           if (!(kdzSerial && kdzSerial->mode)) return FALSE; \>      } \> #endif \> \>      GePrint(" "); \>      GePrint(GeLoadString(PDRS_PLUGIN_BANNER)); \>      GePrint("-- "+GeLoadString(PDRS_PLUGIN_NAME)+" "+GeLoadString(PDRS_PLUGIN_EDITION)+" v"+GeLoadString(PDRS_PLUGIN_VERSION)+" "+GeLoadString(PDRS_PLUGIN_COPYRIGHT)); \>      if (kdzSerial) \>      { \>           if          (kdzSerial->mode == 1)          GePrint("-- Trial: "+LongToString(kdzSerial->time)+" days left"); \>           else if (kdzSerial->mode == 2) \>           { \>                SerialInfo     si; \>                GeGetSerialInfo(SERIAL_CINEMA4D, &si;); \>                GePrint("-- Licensed to: "+si.name); \>           } \>      } \>      GePrint(GeLoadString(PDRS_PLUGIN_BANNER)); \>      GePrint(" "); \> \>      return RegisterPipeDreamObj() && RegisterPipeDreamTag(); \> } \> \> //\*---------------------------------------------------------------------------\* \> void PluginEnd() \> //\*---------------------------------------------------------------------------\* \> { \> } \> \> //\*---------------------------------------------------------------------------\* \> Bool PluginMessage(LONG id, void\* data) \> //\*---------------------------------------------------------------------------\* \> { \>      if          (id == C4DPL_INIT_SYS) \>      { \>           // initialize global resource object \>           if (!resource.Init())     return FALSE; \> \>           // initialize and register Serial Number Hook \>           LONG vtype = GeGetVersionType(); \> #ifdef     C4D_R11 \>           if (vtype & VERSION_DEMO)     { GePrint("C4D Demo");     return TRUE; } \>           if (vtype & (VERSION_SAVABLEDEMO|VERSION_SAVABLEDEMO_ACTIVE))     { GePrint("C4D Savable Demo");     return TRUE; } \>           if (vtype & VERSION_SERVER)     { GePrint("C4D Server");     return TRUE; } \>           if (vtype & VERSION_NET)     { GePrint("C4D Net");     return TRUE; } \> #else \>           if ((vtype & VERSION_DEMO) || (vtype & VERSION_SERVER) || (vtype & VERSION_NET))     return TRUE; \> #endif \>           return RegisterKDZSerial(); \>      } \>      else if (id == C4DPL_ENDACTIVITY) \>      { \>           FreeKDZSerial(); \>           return TRUE; \>      } \>      else if (id == C4DMSG_PRIORITY)          return TRUE; \>      return FALSE; \> }



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 13/10/2009 at 23:57, xxxxxxxx wrote:

    thank you very much... lets see if i can get the hang of all this finally :)



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 14/10/2009 at 11:58, xxxxxxxx wrote:

    Quote: __
    >
    > * * *
    >
    > Note that I donot check the serial number when running Demo, Net, Server.
    >
    > * * *

    doesn't that mean that everyone using net could use the plugin??



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 14/10/2009 at 12:40, xxxxxxxx wrote:

    Quote: Originally posted by anubis23 on 14 October 2009
    >
    > * * *
    >
    >> Quote: __
    >>
    >> * * *
    >>
    >> Note that I donot check the serial number when running Demo, Net, Server.
    >
    >>
    >> * * *
    >
    >
    >
    >
    > doesn't that mean that everyone using net could use the plugin??
    >
    >
    > * * *

    Yes, but you can't do anything useful except rendering in NET, for example you can't create scenes.

    cheers,
    Matthias



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 14/10/2009 at 12:46, xxxxxxxx wrote:

    To render and that is all.

    Can't do much else without the registered plugin in Cinema 4D itself.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 14/10/2009 at 12:52, xxxxxxxx wrote:

    *crosspost* :)

    I don't agree with tcastudios take on this. I don't care if someone has a license version of my plugin or not to do NET Render work. Anyway, without a license for Cinema 4D itself, they can't even load a document and use NET Render to render it from there - they'll just have a bunch of malfunctioning garbage with '?' for the unregistered plugins required. So, they can get a c4d document with my plugin being used and render it with NET Render but that is about it.

    For several of the render farms out there, I simply provide them the plugin - no serial number needed. Less work for me, less stress on them. :D



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 14/10/2009 at 14:00, xxxxxxxx wrote:

    Robert, there must be a misunderstanding here.
    All my plugin do run -without- licenses on NET, and I recommended
    that that is a good idea.

    Having licenses for NET is just a hustle for renderfarms to do installs
    and possible just make life complicated for all.

    What I meant was, in the case that anyone should run them without buying a license (for the main app) they cannot count on any support.

    Luckely no problems have turned up and the prominent commercial
    renderfarms have all bought a main license.

    Cheers
    Lennart



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 14/10/2009 at 14:50, xxxxxxxx wrote:

    I misunderstood then. Sorry about that.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 14/10/2009 at 23:28, xxxxxxxx wrote:

    ah, ok.. didnt know how that whole net thing works.. now i guess i understand..

    thanks a lot to all of you!

    cheers,
    ello



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 05/06/2011 at 07:46, xxxxxxxx wrote:

    Hi Robert,

    I notice that you use two separate versions of  Rijndael.h in your code sample.   would you mind sharing what changes you had to make for it to work on Mac?

    Thanks,

    Shawn



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 05/06/2011 at 21:33, xxxxxxxx wrote:

    Shawn,

    There were some changes required between the OSs.   I'll attached them to a PM. :)


Log in to reply