#1 Re: mORMot 1 » Mormot Production Mode » 2018-04-25 11:40:11

Thank you all for your help.

All works fine now, i just couldn't see the forest for the trees.

#2 mORMot 1 » Mormot Production Mode » 2018-04-25 05:55:04

ImproSnake
Replies: 5

Hello all together,

once more i need your help.

We have the following situation:

We developed our Mormot Server on a single machine (localhost) as a Rest Server which serve JSON Content via Interface and Method based Services.

All work fine. We developed an angular application as frontend as well.

Now we want to host the Mormot Server on our Production Server. This is a virtual Server which is hosted in a Cloud.

This Server got IIS installed and got multiple Sites configured on the port 80 and 443 (for ssl).

Now i want to deploy the mormot server aside the IIS. He shall listen on a different Port. I Can register a Server and i can see that an URL become registered.

We add port filter rules to the firewall so the Messages get forwarded to our Server. But we cant reach the Mormot Server external nor via our web application.

Is it possible to have IIS and Mormot listen on different Ports on the same server ? Or do we have to use another Server for mormot ?

We wrap our head around this for now 3-4 days. But we cant get it to work.

Maybe one of you can help us out here.

If further Information are needed, just request them.

Thank you all for your time.

#3 mORMot 1 » Connection Properties in Services » 2018-03-06 10:08:26

ImproSnake
Replies: 1

Hello all,

i don't know if i do something wrong in the following Scenario.

I connect with a Webclient and authenticate successfull at the mormot server.

Now i can use Interface Based Services. But how to use the Connection Properties to the db the mormot way in the service?

I use the global variable of the defined Connection properties and this works well but now i get a lot of sleeping proccess in my database. They will disappear after the mormot server stops running, but they remain the whole time the server run's. If i use the procedure EndCurrentThread after each execution the Threads in the database are gone. Is this the right way to use or ?

Maybe someone of you can point me in the right direction.

If you need further Information please ask.

Thank you for all of your help

#4 Re: mORMot 1 » SignUp on HTTP » 2018-01-23 06:51:43

Hello Guys,

thank you for your help.

I will rethink the Process. Thank you for your information & ideads

#5 Re: mORMot 1 » SignUp on HTTP » 2018-01-22 10:18:04

Hello,

Sorry for reviving this old Thread, but i am wrapping my head around this for quite a while.

I have a similiar Problem here.

I want to give the user the possibility to register himself at a Webapplication written in Angular.

So i want to do the following based on your suggestion :

Ask the Server for a IV and get this. This is an easy to solve Problem.

The Client takes the IV and encrypt his credentials (as far as you stated).

But if the Client sends the Cypher to the Server, how does the Server know the IV for this specific Client ?
We have no session cause we  dont called the Auth yet.

In my Opinion, sending the iv back to the Server in the Client Response breaks the Security.

How does the Server know the IV for every specific Client if they arent authenticated yet ?

Saving the IV and a ID in a Database temporarily semms wrong to or ?

How can we achieve this ?

Maybe i cant see the forest for the trees here and the solution is quite simple.

Thank you guy's for your help.

#6 Re: mORMot 1 » Interface based services (HTTP GET/POST confusion) » 2017-12-19 09:35:55

Hi ab,

Thank you for your help, i found the solution in this forum post : https://synopse.info/forum/viewtopic.php?id=3621

I defined the  interval based header with the wrong parameters. And theefore mormort done what it was intended to do, it ignored the unknow ones. All fine, i just missunderstodd something.

#7 Re: mORMot 1 » Interface based services (HTTP GET/POST confusion) » 2017-12-18 14:24:44

Hi Ab,

unfortunately this change doesn't make the thing work.

Examplecode on the ServerSide

Interface

Unit interfaceService;

interface

uses
  SynCommons,
  mORMot;

type
  ITickets = interface(IInvokable)
    ['{64DC19BA-673A-4D5F-B1D3-36629063563B}']
    function method(const obj : RawJSON) : RawJSON;
  end;

implementation

initialization

// so that we could use directly ISession instead of TypeInfo(ISession)
TInterfaceFactory.RegisterInterfaces([TypeInfo(IService)]);

end.

And the implementation in the Server

function TServiceService.method(const objbj: RawJSON): RawJSON;
begin
  result := obj;
end;

And on the client side i do something like

 public saveTicket(obj: any): void {
    let uri: string = '';

    uri = this.apiRoot + '/Tickets.saveTicket';

    uri = this.authService.SessionSign(uri);

    this.http.post(this.server + '/' + uri, obj).subscribe((response)=>{
      console.log(response);
    });
  }

The uri with signature session boils down to  something like http://localhost:8080/API/Service.method?session_signature=7393368f69f0c125a13c22bc

Where obj looks like
{ key:1 val1, key2:val2,key3:val3}

The Server lock the call and this params, that is why i suppose he got the data successfully, but i dont know how to access this data in the interface based method.

The result i get in my Browser is always [null].

Maybe this helps furhtermore

#8 Re: mORMot 1 » Interface based services (HTTP GET/POST confusion) » 2017-12-18 13:50:31

Hello, i have a similiar Problem, but the other way around.

I call Interface based services from an ajax client.

Now i want to POST an object to the server.

I do this with a normal HTTP Post call.

The Mormot Server logs that i called the Method and he even log the submitted data.

But i dont know how to access the data in the interface based method.

i.e.

function TService.method(obj: RawJSON): RawJSON;
begin
  result:=obj;
end;


But the Result is always empty. Why i dont get the submitted Data in obj.

The call look like this :

http://localhost:8080/API/Service.method?session_signature=7393368f69f0c125a13c22bc

and the Payload :

{key1: val1, key2: val2, key3: val3,... and so on}

How can i access this payload on the mormot Server Side in the Interface based Service.

I know that you just can stringify the object and send it via URI, but since the URI is restricted in the length/size this isn't a suitable option.

Maybe you can point me in the right direction.

Greetings

#9 Re: mORMot 1 » Bypass Session Signature for single specific URI » 2017-09-06 08:55:26

Thank you ab. That was the right direction to point me. I solved my specific Issue now. Thank you wink

#10 Re: mORMot 1 » Bypass Session Signature for single specific URI » 2017-09-06 08:01:29

Sorry for bother you again, i can't figure out how to use the Method. On the Server Side i just call the Method with the Parameter "checkSession" and i have a Interfaced ISession with a method Session.checkSession.

Maybe it is obvious but i just dont get how to call the Method properly. I can't find a examle as well, any further help is well appreciated

#11 Re: mORMot 1 » Bypass Session Signature for single specific URI » 2017-09-06 05:24:24

Thank you, i just overread that in the docs. Really much appreciate your help!

#12 mORMot 1 » Bypass Session Signature for single specific URI » 2017-09-06 04:10:38

ImproSnake
Replies: 5

Hello Folks,

ist there a possibility to bypass the Authentication for a specific single URI, like it is with the standard URI '/auth'. For that one you dont need a session_signature. I want to do the same for a function which just check the SessionId. And i dont want to run in a 403 Auth failed error if the session doesnt exists any longer (therefore wrong SesionSign).

Any Idea here ?

#13 Re: mORMot 1 » Check if SesionID still authenticated ? » 2017-08-31 07:04:25

@mpv I am aware of this solution but this lack's the opportunit to react before the SessionId is no longer authenticated. For example : Dont load the Route in the Web Application because the SessionID is no longer Authenticated. This is just for enhanced User Eperienced. I think it is unsufficient just redirect the User to the login page out of nowhere.

I came with this solution :

Implement a interface Based Service on the Server Side with a Function like :

function TServiceSession.checkSession(SessionId: Cardinal): boolean;
begin
  if (restServer.SessionGetUser(SessionId) <> nil) then
  begin
    result := True;
  end
  else
  begin
    result := False;
  end;
end;

Now we can call the Service out of the Webapp like htpp://Server/Root/Session.checkSession?SessionId=SessionId&SessionSignature=SessionSignature .

An with this we can implement A RouteGuard so only Authenticated User can Activate specific Routes. This way i dont have to track the Session timeout nor i have to track a variable for the Authentication State.

Maybe this Help someone else out.

#14 mORMot 1 » Check if SesionID still authenticated ? » 2017-08-30 11:03:18

ImproSnake
Replies: 2

Hello all,

is there a opportunity to check if a SessionID is still logged in ?

Background :

i implemented a Typescript Client to work with Angular 4.
Now i want to check if the sessionsId of an authenticated user is still valid (logged in). I want to do this so i can implement propper RouteGuards in Angular 4.
Is there a Way to implement this with a service so i can check it like http(s)://Server/ROOT/checkSessionId?SessionId=Session_Id&Session_signature=session_signature  ?

Any help would be much appreciated.

#15 Re: mORMot 1 » Session not being registered after successful logon.. » 2017-08-30 10:15:46

Hello Guy's,

just in Case somone wants to know the Solution,

you both forgott the session_signature parameter at the url.

it have to look like this http://localhost/root/auth?Username=username&Session=SessionID&session_signature=session_signature

where the session_signature is computed from the uri (e.g. root/auth?Username=username&Session=SessionID)

hope this helps anyone who read this

#16 Re: mORMot 1 » Javascript authentication » 2017-08-23 07:24:52

Thank you all for your help.

The error was much much easier than the crc - Function and so on.

I just missused the Session Sign Function. I set the whole url and not just root + params.

Instead of : 'http//:xxxxxxxx/ServerRoot/Service'+Params

You have to set 'ServerRoot/Service'+params

as URL for the SessionSign Function.

Just in case somone got stuck on the same Problem.

Sorry for wasting your time.

#17 Re: mORMot 1 » Javascript authentication » 2017-08-22 10:04:28

Hi again. I worked on the server side debug.

First the mormot Log to conolse prints out something like  "Invalid Signature expected xxxxxx got yyyyy "

And on the server it comes down to mormot.pas line 51804

if HexDisplayToCardinal(PTimeStamp+8,aSignature) and
       (aSignature=aExpectedSignature) then

Obviously the Expected Signature and the aSignature doesnt match. But i cant find out why...

I would be glad if someone can help here

#18 Re: mORMot 1 » Javascript authentication » 2017-08-22 05:20:56

Hi ab, thank you again for your help.

I lack the experience to see that the signature is wrong by just looking at it big_smile

Thats how i compute the signature.

public SessionSign(url: string): string {
    var Tix: number;
    var Nonce: string;
    var s: any;
    var ss: any;
    var d: Date = new Date();

    Tix = d.getTime();

    if (this.LastSessionTickCount == Tix) {
      Tix = Tix + 1;
    }
    
    this.LastSessionTickCount = Tix;
    Nonce = Tix.toString(16);

    while (Nonce.length < 8) {
      Nonce = '0' + Nonce;
    }

    if (Nonce.length > 8) {
      Nonce = Nonce.slice(Nonce.length - 8, Nonce.length);
    }
    
    ss = this.crc32(url, this.crc32(Nonce, this.SessionPrivateKey)).toString(16);
    
    while (ss.length < 8) {
      ss = '0' + ss;
    }
    
    s = url.indexOf("?") == -1 ? url + '?session_signature=' : url + '&session_signature=';

    return s + this.SessionIDHexa8 + Nonce + ss;
  }

Where SessionIdJHexa8 and SessionPrivateKey  are

 private gotSession(aSessionKey: string) {
    var i: number = aSessionKey.indexOf("+");
    this.SessionID = parseInt(aSessionKey.slice(0, i));
    this.SessionIDHexa8 = this.SessionID.toString(16);

    while (this.SessionIDHexa8.length < 8) {
      this.SessionIDHexa8 = '0' + this.SessionIDHexa8;
    }

    this.SessionPrivateKey = this.crc32(this.PasswordHashHexa, this.crc32(aSessionKey, 0));
  };

#19 Re: mORMot 1 » Javascript authentication » 2017-08-21 10:15:42

@ab

Thank you for your help. I call the AuthenticationRegister now before i call CreateMissingTables. But i still get 403 Forbidden from the Webapplication but all work as expected wiht the mormot Client.

I can login successfully and get a Session but i cant get the signature to work or whatever goes wrong there.

after login

{"result":"1169656096+29EBAE633FDCDA4F25C690589C8CE3863A46063CBDBE9D969C790FA9EF93B64F","logonid":4,"logonname":"***********","logondisplay":"","logongroup":3,"timeout":60,"server":"Server","version":""}

And now after call a service

Response with status: 403 Forbidden for URL: http://localhost:8080/API/Hello.Hello?session_signature=45b789200450f02caf6a4349

{
"errorCode":403,
"errorText":"Authentication Failed: Invalid signature (0)"
}

I hope u can help me further.

Thank you

#20 Re: mORMot 1 » Javascript authentication » 2017-08-21 10:03:27

ab wrote:

You disabled authentication on the server side.
So it is logical to be able to create sessions without any authentication...

Where i disabled the Authentication, i thought the Default Authentication is the Safe Authentication mode ???

#21 Re: mORMot 1 » Javascript authentication » 2017-08-21 09:57:23

I don't now why this should be an issue at all.

This is all i do on the server side

restModel := TSQLModel.Create([], ROOT_NAME);
  try
    // initialize Rest-Server
    restServer := TSQLRestServerFullMemory.Create(restModel,false);
    restServer.CreateMissingTables(0, [itoNoAutoCreateUsers]);
    restServer.AuthenticationRegister(TSQLRestServerAuthenticationDefault).Options := [];
    fillAuthFromDB(restServer, dbConProbs);
    try
      // register the Services on the Server
      restServer.ServiceDefine(TServiceHello, [IHello], sicPerSession);

      // launch HttpServer which publish the restServer
      // useHttpApiRegisteringURI = AutoRegistering the URI specified by the restServer + PORT_NAME
      httpServer := TSQLHttpServer.Create(PORT_NAME, [restServer], '+', useHttpApiRegisteringURI);
      try
        httpServer.AccessControlAllowOrigin := '*';
        writeln(#10'Background server is running.'#10);
        writeln('Press [Enter] to close the server.'#10);
        readln;
      finally
        httpServer.Free;
      end;
    finally
      restServer.Free;
    end;
  finally
    restModel.Free;
  end;

And the implementation of the services + Add the Users from my db to the sqlite tables to use the mormot framework auth of course.

And the session signature works as expected with a mormot client. There i can use the services after login, That's why i assume something is wrong in my javascript code

#22 Re: mORMot 1 » Javascript authentication » 2017-08-21 07:47:11

Hello Guys, i followed the code from RangerX and esmondb to implement the Authentication in typescript (for angular 4).

The login works as expected, and i get a signature, but i fail at the Session signature, the Server always answer wtih 403 : Forbidden

Code for the Authentication

public login(username, password): void {
    this.Username = username;
    this.PasswordHashHexa = sjcl.codec.hex.fromBits(sjcl.hash.sha256.hash("salt" + password)); //Password Hex Sha256 generate
    this.http.get('http://localhost:8080/' + this.ServerAuthRoot + '/auth?UserName=' + username).map(this.extractData).catch(this.handleErrorObservable).subscribe(
      response => {// We got a Nonce from the Server in response.result
        this.gotNonce(response.result);
      },
      error => {// Some Error occured, we did not got a Nonce from the Server
        alert(JSON.stringify(error));
      }
    );
  }



  private gotNonce(aNonce: string): void {
    var shaPass: string;

    var aClientNonce = "", s = "", d = new Date();

    aClientNonce = d.getFullYear().toString();
    s = d.getMonth().toString();

    if (s.length === 1) {
      s = '0' + s;
    }

    aClientNonce = aClientNonce + '-' + s;
    s = d.getDate().toString();

    if (s.length === 1) {
      s = '0' + s;
    }

    aClientNonce = aClientNonce + '-' + s + ' ';
    s = d.getHours().toString();

    if (s.length === 1) {
      s = '0' + s;
    }

    aClientNonce = aClientNonce + s;
    s = d.getMinutes().toString();

    if (s.length === 1) {
      s = '0' + s;
    }

    aClientNonce = aClientNonce + ':' + s;
    s = d.getSeconds().toString();

    if (s.length === 1) {
      s = '0' + s;
    }

    aClientNonce = aClientNonce + ':' + s;
    aClientNonce = sjcl.codec.hex.fromBits(sjcl.hash.sha256.hash(aClientNonce))

    shaPass = sjcl.codec.hex.fromBits(sjcl.hash.sha256.hash(this.ServerAuthRoot + aNonce + aClientNonce + this.Username + this.PasswordHashHexa));
    s = 'http://localhost:8080/' + this.ServerAuthRoot + '/auth?UserName=' + this.Username + '&Password=' + shaPass + '&ClientNonce=' + aClientNonce;
    // prompt('Resulting Call :', s);
    this.http.get(s).map(this.extractData).catch(this.handleErrorObservable).subscribe(
      response => {
        alert(JSON.stringify(response));
        this.gotSession(response.result);
      },
      error => {
        alert(JSON.stringify(error));
      }
    )
  }

  private gotSession(aSessionKey: string) {
    var i: number = aSessionKey.indexOf("+");
    this.SessionID = parseInt(aSessionKey.slice(0, i));
    this.SessionIDHexa8 = this.SessionID.toString(16);

    while (this.SessionIDHexa8.length < 8) {
      this.SessionIDHexa8 = '0' + this.SessionIDHexa8;
    }

    this.SessionPrivateKey = this.crc32(this.PasswordHashHexa, this.crc32(aSessionKey, 0));
  };

and the Session Signature

public SessionSign(url: string): string {
    var Tix: number;
    var Nonce: string;
    var s: any;
    var ss: any;
    var d: Date = new Date();

    Tix = d.getTime();

    if (this.LastSessionTickCount == Tix) {
      Tix = Tix + 1;
    }
    
    this.LastSessionTickCount = Tix;
    Nonce = Tix.toString(16);
    

    while (Nonce.length < 8) {
      Nonce = '0' + Nonce;
    }

    if (Nonce.length > 8) {
      Nonce = Nonce.slice(Nonce.length - 8, Nonce.length);
    }
    
    ss = this.crc32(url, this.crc32(Nonce, this.SessionPrivateKey)).toString(16);
    
    while (ss.length < 8) {
      ss = '0' + ss;
    }
    
    s = url.indexOf("?") == -1 ? url + '?session_signature=' : url + '&session_signature=';

    return s + this.SessionIDHexa8 + Nonce + ss;
  }

and the crc32 function

private Crc32Tab = [ /* CRC polynomial 0xEDB88320 */
    0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,0x9E6495A3,
    0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,0xE7B82D07,0x90BF1D91,
    0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,0x6DDDE4EB,0xF4D4B551,0x83D385C7,
    0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5,
    0x3B6E20C8,0x4C69105E,0xD56041E4,0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B,
    0x35B5A8FA,0x42B2986C,0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59,
    0x26D930AC,0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F,
    0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,0xB6662D3D,
    0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,0x9FBFE4A5,0xE8B8D433,
    0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,0x086D3D2D,0x91646C97,0xE6635C01,
    0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457,
    0x65B0D9C6,0x12B7E950,0x8BBEB8EA,0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65,
    0x4DB26158,0x3AB551CE,0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB,
    0x4369E96A,0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9,
    0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,0xCE61E49F,
    0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,0xB7BD5C3B,0xC0BA6CAD,
    0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,0x9DD277AF,0x04DB2615,0x73DC1683,
    0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1,
    0xF00F9344,0x8708A3D2,0x1E01F268,0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7,
    0xFED41B76,0x89D32BE0,0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5,
    0xD6D6A3E8,0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B,
    0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,0x4669BE79,
    0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,0x220216B9,0x5505262F,
    0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D,
    0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,0x9C0906A9,0xEB0E363F,0x72076785,0x05005713,
    0x95BF4A82,0xE2B87A14,0x7BB12BAE,0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21,
    0x86D3D2D4,0xF1D4E242,0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777,
    0x88085AE6,0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45,
    0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,0x3E6E77DB,
    0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,0x47B2CF7F,0x30B5FFE9,
    0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,0xCDD70693,0x54DE5729,0x23D967BF,
    0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D];

    private Crc32Add(crc,c)
    /*
      'crc' should be initialized to 0xFFFFFFFF and after the computation it should be
      complemented (inverted).

      CRC-32 is also known as FCS-32.

      If the FCS-32 is calculated over the data and over the complemented FCS-32, the
      result will always be 0xDEBB20E3 (without the complementation).
    */
    {
      return this.Crc32Tab[(crc^c)&0xFF]^((crc>>8)&0xFFFFFF);
    }

    private crc32(str, crc)
    {
      var n, len;
      len = str.length;
      //var crc;
      if (typeof(crc) == "undefined") { crc = 0xFFFFFFFF; }
      else {
        crc = crc^0xFFFFFFFF; //crc = ~crc;
        if (crc < 0) {
          crc = 4294967296 + crc;
        } 
      }
      //crc=0xFFFFFFFF;
      for (n=0; n<len; n = n+1) {
        crc = this.Crc32Add(crc,str.charCodeAt(n));
      }
      crc = crc^0xFFFFFFFF; //crc = ~crc;
      if (crc < 0) {
        crc = 4294967296 + crc;
      } 
      return crc;//^0xFFFFFFFF;
    }
}

I don't know why the Session Signature doesnt work as expected.

I hope you guy's can help me out.

Edit : And Sorry for reviving an old Post

#23 Re: mORMot 1 » Compilation Error in Current Nightly Build » 2017-06-22 05:37:15

Hello again,

There had to be an error in my system, i don't know which. I just build me a fresh setup an anything works fine.

Thank you all for your patience and help.

Can be Closed

#24 Re: mORMot 1 » Compilation Error in Current Nightly Build » 2017-06-21 06:04:55

Hello again, like i said i missunderstood your question.

Thank you for your patience.

The Target Platform is Win32.

#25 Re: mORMot 1 » Compilation Error in Current Nightly Build » 2017-06-20 12:28:19

ab wrote:

On which platform are you trying to compile it?

I'm not able to reproduce the issue with Win32 or Win64 using Delphi XE6.


It is the same Platform, it gets compiled on this machine and it stays there for test reasons. We are in the process to decide if we use mORMot or some other Frameworks for our upcoming Application.

So Win64.

And for further Clarification, i try to run the TestSql3 project shipped with mORMot.

But Maybe i am only misunderstanding your question^^

#27 Re: mORMot 1 » Compilation Error in Current Nightly Build » 2017-06-20 12:14:56

Hello,

the platform ist Windows 8.1 Pro 64 Bit

#28 Re: mORMot 1 » Compilation Error in Current Nightly Build » 2017-06-20 09:59:58

Hello again,

i removed all mORMot Versions from my System and downloaded a new fresh Version of the NightlyBuild.zip . I get the Same error now in line 29580 but i get further errors,

like undeclared identifier RawUTF8. I set all the needed Lib and search paths like it is documented.

#29 Re: mORMot 1 » Compilation Error in Current Nightly Build » 2017-06-20 09:16:21

Ty for your fast Reaction.

I will check this and let you know if this solved my Problem.

#30 mORMot 1 » Compilation Error in Current Nightly Build » 2017-06-20 07:22:02

ImproSnake
Replies: 17

Hello,

i downloaded the current Nightly Build.

I followed the Instructions to install mORMot.

But i can't compile the TestSQL3.

I' am working on Rad Studio XE5.

The Compilation error Stops at line 30642 in mormot.pas  : "with Deref(CT^.ParentInfo)^ do"

The Error Log say that an inline function cant use the local symbol "Deref"

Maybe Someone of you eperienced an similiar issue and can help me out.

Board footer

Powered by FluxBB