YASAMM Beta 1.0.5.0 Released

oldfart

Member
Hi guys,

I am releasing a Steam Command line version of YASAMM (aka vnetcafe.exe) it is available at this link Download Page - you are not required to Register on the web site - that is basically so my clan's members may borrow library accounts.

This has not been checked for viruses, spamming or identity phishing etc - and I'm obviously not the one to do that! :rolleyes: (The source will be made available FS Owners if they require it).

I need some Beta testers who will have to live a day or two without the most recent FAQ.

An Older FAQ is available Download or here Setup YASAMM.

Caveats: I'm peeved that I have had to use the command line to launch Steam both locally and remotely. :mad: The Launch through the Steam DLL API "appears" to have stopped working in the last 6 x weeks - or I've stuffed the code up, I am still trying (with Erix920) to resolve the issue.

cheers
OldFart
 
oldfart, you need to use steamclient.dll. If you need help, join @ irc.rizon.net #rev-crew and I will be glad to help
 
hi i downloaded this and have just started trying it out. i foolishly made a local account first. suggestion - you should allow users to make a web account directly from the program. i made an account on the website and all went well. (before i made the account on the website i tried to login using the "web" button :) and it said 404 unauthorized. i think it should say like "account not found on the server or something like that) so anyways after i activated my account i went back to the program and logged in successfully. i added my steam account and launched insurgency successfully. btw i'm on Vista Home Premium 64-bit. on the website when i was logged in i saw a page called Borrow Games. i'm curious. is this going to be what it sounds like? how will it work? thanks i really like this program so far.
 
Hi psuchris,

Thanks for your comments and feedback!

I would not normally recommend storing your steam account Info on the web site - until I can set it up as a backup and "encrypted" - to a key of your choosing. (I can read it atm ;) ).

Being a registered web site member will soon allow you to access other members using "NAT traversing P2P" at the moment P2P only works if you know someones IP and it's port-forwarded etc (unless on a LAN). Our clan members can actually borrow any of those accounts in the Web site (aka Library) that are "enabled" by the owner for borrowing. It's where we stick our secondary accounts - NEVER our primary ones. :eek:

In the interim - I suggest you use a local account - it's what most of us use.

You can add multiple Steam accounts to your local "dbase" which is stored encrypted in the registry. For my kids I put my accounts on their PCs in their vnetcafe account and then "hide" the info - check the FAQ.

I haven't finished the new up-to-date FAQ but as soon as I finish some bits for Erix I will get onto it.

Suggestions so far:-
1. Allow an alternate display by game (then launch by clicking the account).
2. Transfer a "Steam account" to another PC/vnetcafe account and then "hide it's info".
3. Borrow directly from the Library (web site)
4. True P2P
5. Make it more user friendly - I too much of a tech-head :rolleyes:
6. Fix bugs :roll:

7. Maybe rename it to YASAMM - I own the domain name ;)
8. Add times - to limit when my kids can use my accounts

cheers
OldFart
 
Hi guys,

I'd just like to thank Uncle D for giving me so much of his (work's) time yesterday. :D

He has given me a good lift into "SteamClient.Dll" and I appreciate him spending his time helping me (and making me use IRC for the first time :rolleyes:).

I will test what he has given me later this afternoon, as it's too bloody hot to do much here at the moment!

Hopefully the information will allow YASAMM to go back to using and launching Steam games without using the command line - this will possibly make it more secure and better controlled.

Thanks to the rev-crew for allowing us to use their IRC channel - more and more I'm liking this community - someone on the opposite side of the world helping me with my problem all for the community's benefit!

If this works - I'll repackage my (and Uncle D's) Steam Dll Interface Test harness and release the source (if Uncle D - doesn't object)!

cheers
OldFart
 
oldfart,
maybe you should join the channel again sometimes so we can see how to get rid of that "no permissions to run 'game'" message.
 
oldfart,
maybe you should join the channel again sometimes so we can see how to get rid of that "no permissions to run 'game'" message.

Hi Uncle D,

Whenever you are ready please let me know. I didn't want to "barge in" without an invitation! :D

I have also setup a SteamTester.zip of the entire project (Welcome to VNetCafe) if you need to check if I've stuffed up the code anywhere!

Any info and steps that I get from you - I will use to update the SteamTester - then others may run it from time to time and see if Steam is still changing stuff! :mad:

cheers
OldFart
 
You should join the channel whenever you get the chance, and just leave me a PM. (my nickname will always be there) I try to visit it regularly so when I'm not AFK, I can see all private messages.
 
Uncle D said:
You should join the channel whenever you get the chance, and just leave me a PM. (my nickname will always be there) I try to visit it regularly so when I'm not AFK, I can see all private messages.
I'll be over to hassle you shortly - sorry about the delay.


Hmm, See now you've gone and piqued my interest... Why'd you have to go and do that...

Well interest and input is always healthy! ;)

I already have standard Peer-to-Peer using known IP/Ports and Port-Forwarding for NATs and Firewalls.

I am just about finished P2P using "HolePunching Udp" using a "Static IP Server" to act as the Relay point! This will require Web-site Registration for validation of Username/Password before allowing forwarding to a Peer (Just re-invented Steam Friends :rolleyes: ).

What I really need is someone to help finish the HTML Help/FAQ :D

When I finish the P2P(II) I hope to get Uncle D to help finish launching games without using the command line/GUI. It was working up until Valve changed everything about 8 x week ago! :(

cheers
OldFart
 
I will help with anything too, what I don't know I'll learn. I'm sure your app will be top notch with thr countless hours you've put in ;). I will also supply as many accounts as possible for your system.
 
Jeezuzz,

Thanks for the inspiration guys - I come in here to see what you blokes are doing and it motivates me to keep "plugging away".

The current FAQ can be found at:-
How do I get started
and
Setup Steam Account Manager

The following is only partially completed (and hidden)as I thought WTF and got into the UDP Hole Punching scenario!
Setup Peer to Peer

I'm open to suggestions in most areas including the web-site.

Thanks again for the new motivation! ;)

cheers
OldFart

options_tcpip.jpg
 
hey, are we gonna make it happen or not ;)

Hi Uncle D,

MOST DEFINITELY
- I am setting up the "UDP Hole punching" as a stand-alone VS6 :rolleyes: project (Clients and Server) and as soon as I'm satisfied with my testing - I'll be after you!! ;)

Erix920 has also given me some food for thought - I think I'll rename YASAMM - "Ben Hur" (Movie reference: a cast of thousands and years in the making) ;) What does Bigger than Ben Hur mean? - Yahoo! Answers

cheers
OldFart
 
Looking really promising :) Can files be transferred over this p2p?

Hi Erix920,

That is a real probability - but remember it is using UDP (unreliable delivery) but it means the P2P will work with 80+% NAT/Firewalls whereas the stats when using TCP is only about 60+% of NATs/Firewalls.

The protocol I've implemented above the UDP, uses handshaking etc - so I'm not sure how fast it would be - we can try later and see! :D

The IP based P2P - which is already implemented - is using TCP and would do file transfers (encrypted) quite happily.

cheers
OldFart
 
Hi guys,

I have done much more than what appears here (see bottom) as this is my TODO: list for today ..

It may be a worthwhile future 2 x DLLs for those interested in setting up P2P via a central Win2K server! It's all message based except for Common...
UdpCommon.h

Code:
	//	--->	------------------------	<---
	//	--->	Windows Type Structures		<---
	//	--->	------------------------	<---
typedef struct	TWinSessionEndPoint_Tag {
	CString		csWinIpAddress;
	int		nWinPort;
} TWinSessionEndPoint, TWSEP, * PTWSEP;

P2PClient.h
Code:
BOOL	CP2PClient::SetHostParameters( HWND hWndParent,
					LPCTSTR pszUsername,
					LPCTSTR	pszPassword,
					TWSEP	&rtLocalPrivateSep,
					CEvent *pEvTerminated )

and Server ..
P2PServer.h
Code:
BOOL	CP2PServer::SetHostParameters( HWND hWndParent,
					TWSEP	&rtServerPrivateSep,
					CEvent *pEvTerminated )

And just to prove I'm not asleep ..

Code:
------------------------------------------
[ ]	UDP Hole Punching
	[X]	Common
		[X]	Keep Alive
			[X]	Definition
			[X]	Debug
			[X]	Packet
			[X]	Set KeepAlive - Create Packet
	[ ]	RU There
	[ ]	IAM HERE
	--------------------------------------
	[ ]	Server CWinThread
		[X]	Start Thread
		[X]	Stop Thread
		[X]	Remove timed out sessions
		[ ]	Retransmit unacknowledged messages
		[X]	Server Socket
		[X]	Client Session Array
			[X]	Add Session
			[X]	Remove Session
			[X]	Repeat Tx
		[^]	Register Request
			[X]	Rx Register
			[X]	Ack - All Ok
			[X]	NAK
				[X]	Logged In same username diff't password
				[X]	Logged in Same username password - diff't SEP
				[ ]	Different username same SEP
		[ ]	Connect Request
			[ ]	Validate
				[ ]	Ack
				[ ]	Nak
			[ ]	Contact Peer
				[ ]	Tx Peer Connect Request - use "Call me"
			[ ]	Contact requestor
				[ ]	Tx Peer Connect Request - use "RU There"
		[ ]	Relay Peer Message - use server's connection
	------------------------------------------------------------
	[ ]	Client CWinThread
		[ ]	Add States
			[ ]	Idle
			[X]	Setup Done
			[X]	Client Started ... Ready	.. Server Started
			[X]	Registering
			[X]	Registered
				[X]	Keep-Alive every ? x seconds to server
			[X]	Requesting Peer Connect ... Request Peer Connect
				[X]	Keep-Alive every ? x seconds to server
			[X]	Attempting Peer Connect
				[X]	Keep-Alive every ? x seconds to server
			[^]	Peer Connected
				[X]	Keep-Alive every ? x seconds to server
				[ ]	Keep-Alive every ? x seconds to Peer
		[X]	Start Thread
		[X]	Stop Thread
		[ ]	Remove timed out sessions
		[X]	Retransmit unacknowledged messages
		[X]	Client Socket
		[X]	Peer Session Array
			[X]	Add Session
			[X]	Remove Session
			[X]	Repeat Tx
		[X]	Register Request
			[X]	Tx Register
			[X]	Process Ack
			[X]	Process Nak
				[X]	Duplicate name and different IP 
				[X]	Duplicate name and different Password
			[X]	Process Timo
		[ ]	Connect Request
			[ ]	Tx Connect Request
			[ ]	Process Ack
			[ ]	Process Nak
				[ ]	Not Exist
				[ ]	Yourself ?
			[ ]	Process Timo
		[ ]	Peer Connect Request - Unsolicited
			[ ]	Send Ack/Nak - maybe Ack only

cheers
OldFart
 
This may help with your "Remove timed out sessions":

The way I have my system (if I may use that term) is when a client's session is older than session connection time + 30 minutes then I go and remove the connection. I do this by looping through the current connection's table and checking the "ConnectionDateTime" property I have made which is assigned when the client connects and gets a session ID. This loop is on a timer which I have set to go off every 5 minutes or so.

Hopefully that makes sense :).

Code:
Public Class clientData
    Public Structure CClient
        Public socket As Socket
        Public thread As Thread
        Public c_filename As String
        Public c_command As String
        Public c_dataHolder As String
        Public c_fileTransfer As Boolean
        Private c_isAdmin As Boolean
        Public Property c_isAdminProperty() As Boolean
            Get
                Return c_isAdmin
            End Get
            Set(ByVal value As Boolean)
                c_isAdmin = value
            End Set
        End Property
        Public c_filesize As Int64
        Dim c_authenticated As Boolean
        Public c_address As String
        Public c_uid As String
        Public c_conTime As String
        Public c_conId As Integer
    End Structure
End Class

Module Module1
    Private g_DataHolder As New Hashtable()
    Function unAuth() Handles unAuthTimer.Elapsed
        Dim client As CClient

        Try
            For Each item In g_DataHolder
                Dim dataItem As DictionaryEntry
                dataItem = item
                client = CType(g_DataHolder(dataItem.Key), CClient)
                If client.c_conTime < Date.Now.AddMinutes(-1) Then
                    Debug("Account expired")
                    g_DataHolder.Remove(dataItem.Key)
                End If
            Next
        Catch ex As Exception
        End Try

    End Function
End Module
In this case if the session is older than 1 minute then it is removed from the session info table.
 
Thanks for that Erix920,

"Great minds think alike" - because I am doing something almost identical - but using seconds instead of minutes. ;) I just alter the "granularity of my tick" for fine tuning.

Code:
	//	--->	---------------		<---
	//	--->	Time Out Values		<---
	//	--->	---------------		<---
#define	P2P_CLEANUP_TICK	1000L			// Cleanup granularity
#define	P2P_CLEANUP_TIMO	P2P_CLEANUP_TICK * 20
#define	P2P_SERVERKEEPALIVE_TIMO P2P_CLEANUP_TIMO / 4

#define	P2P_CLIENTRETRY_TICK	1000L			// Retry Rx/Tx granularity
#define	P2P_CLIENTRETRY_TIMO	P2P_CLIENTRETRY_TICK * 5	// Tx ack/Nak Timo
#define	P2P_PEERKEEPALIVE_TIMO	15000
I wish you were using C++ then I could offload some of this onto you - as IMO you have some bloody good design ideas and are a work-aholic! :D

cheers mate
OldFart
 
Looks good, hopefully that all works the first time :).

Now we just have to find you a skinning system to make the GUI more sleek than the generic windows themes.
 
Looks good, hopefully that all works the first time :).

Now we just have to find you a skinning system to make the GUI more sleek than the generic windows themes.

Hi all you other buggers who read this thread,

Erix920 has some very interesting ideas that he has been shooting at me via PM.

It's taken me a while to grasp where he was coming from - but I think I'm finally getting there.

I won't post his suggestions here - but I do think that with some tweaks to the existing YASAMM/vnetcafe system (ie. maybe create a new one) we may end up with something that will "rock".

Just to fill you others in - vnetcafe is a system I started about 9 months ago which was web and PC based.

1. Clan members could donate old Steam accounts (stored in the website Dbase)
2. Other Clan members could book/borrow available games via the website
3. The website would generate a new username/password pair and email it to the borrower.
4. The borrower could then use the PC based application to access the game launch information using the generated username/password.
5. After a period of time the username/password validity would elapse.
6. Another clan member could then book/borrow the donated account.

Erix920 has now made some suggestions that would allow a whole new use for the above! :D

Nice lateral thinking! ;)

cheers
OldFart
 
i think that when you are letting people "borrow" accounts that it should automatically log in with the username and password so that the person never actual sees it so they wouldn't be able to steal it at all. it should all be automatic through the program.
 
The only luck we are going to have with the accounts being stolen is to have the owners verify the account's email. This way no information can be changed.

The one flaw is that anyone from Valve can come in and use the app acting as just another freeloader. They will be able to see the account name and STEAMID. Now of course they wouldn't just leave those accounts alone, they would disable all of them one by one.

This is why we have decided to make what are simply "realms". Account owners will be able to choose which access group can login to their account. Whether it be Admins, VIPs or everyone is their choice. Also, there will be an option to specify which unique people can access it by using IP checks and if implemented, hardware id checks (in the case of dynamic ISPs).
 
i think that when you are letting people "borrow" accounts that it should automatically log in with the username and password so that the person never actual sees it so they wouldn't be able to steal it at all. it should all be automatic through the program.

Hey psuchris,

That is actually what nearly all my threads have been aiming for!

The nearest I've got so far was the Steam.dll launch of the game - but Valve have stopped that about 8 x weeks ago! (My hopes in this department rest with Uncle D :D ).

The current version uses the "command line launch" which still allows the user to see the "Steam Username"!

If you read Erix920's post above - you can see that we are concerned about Steam getting that info!

I suggest you download the current PC version (1.0.5.0) and set up a test account (new steam account) on your PC and you will see what we are talking about!

I know my explanations tend to be a bit "dry" - so please feel free to ask questions - because that way we will both improve our understanding! ;)

cheers
OldFart
 
Back
Top