I figured it out! CALL is defined as 1, PUT is defined as 2.
A European option is defined as 1<<2.
My data source includes the exercise type, European (E) or American (A).
In my data parsing script, contract type is defined as such:
O->Type = ifelse(*PC == 'P',PUT,CALL) + ifelse(*EA == 'E',EUROPEAN,0);
This means for a European call option, type is 1 + 1 * 2^2 = 5 and a European put option type is 2 + 1 * 2^2 = 6.
When redfine CALL as 5 and PUT as 6, my contract is found!