But isn't the check only performed once every 2 weeks (or w/e the time between checks is defined to)?
It depends on what you set.
So that would mean that if the check return INET flag the grace period should be on because the end of re-check period is the only time the online check is performed or am I not getting something?
The grace period starts immediately after nDaysBetweenChecks. If there's no internet connection then they can continue to use your app for the gracePeriod. Once the grace period has expired, IsGenuineEx() will continue to try to contact the servers, however it will say TA_FAIL if it can't reverify the activations.
I have problems with this. I thought the point of an online check is to deactivate the license if it's either not valid anymore or grace period is over and the connection is impossible.
It says it's deactivated. And if you use IsGenuineEx(), then for all intents and purposes it is deactivated (because your app won't know otherwise). However, TurboActivate doesn't remove the activation files. This allows you to handle cases where the customer is "deactivated" because they failed to allow internet connections to the activation servers.
How? Like I said. Call IsActivated(), if it returns TA_OK, then you know that the "deactivation" was a result of IsGenuineEx() not being able to reverify with the activation servers (because you should only be calling IsActivated() in the case where IsGenuineEx() returns TA_FAIL).
IsActivated() doesn't connect to the Internet so it can't do anything there.
I don't understand the question. IsActivated doesn't connect to the internet. That's correct. It verifies the cryptographic signature of the activation data locally.
Don't use IsActivated and then IsGenuineEx(). Just use IsActivated() in the case where IsGenuineEx() returns TA_FAIL, and then you're only using it to see whether the failure is because the user is not activated (or was never activated) or if the failure is because the user never connected to the internet and/or actively blocks the activation servers.
I don't have buttons in my program (it's a text interface which at least for now either asked for the key or refused to start without valid license).
OK, then do it through text.
Is it going to work from users perspective or are they going to be forced to wait 5hours to use the program in scenarios 1 and 2?
It depends. That's why you should show a prompt to the user (whether it's a dialog box or a text prompt, it doesn't matter). Then, in that prompt give the user and option to recheck immediately. How? Again, like I said, call IsGenuine().