SageTV Community  

Go Back   SageTV Community > SageTV Development and Customizations > SageTV v7 Customizations
Forum Rules FAQs Community Downloads Today's Posts Search

Notices

SageTV v7 Customizations This forums is for discussing and sharing user-created modifications for the SageTV version 7 application created by using the SageTV Studio or through the use of external plugins. Use this forum to discuss plugins for SageTV version 7 and newer.

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 01-29-2011, 04:33 PM
Fonceur's Avatar
Fonceur Fonceur is offline
Sage Icon
 
Join Date: Jan 2008
Location: DDO, QC
Posts: 1,915
Plugin: SageTCPServer

SageTCPServer is an open source TCP interface to the SageTV API. The original project was started by Beelzerob and used by his SageTV driver for CQC. The source code is accessible through CVS at: SageTCPServer with some descriptions at http://talluscorp.com/mediawiki//ind...=SageTCPServer. Developers should consult: http://talluscorp.com/mediawiki//ind...for_developers .

Starting with version 1.8.8, the actual SageTVPlugin has been implemented, thus breaking the backward compatibility with SageTV 6.

Users of older versions should replace the line:

"load_at_startup_runnable_classes=sagetcpserver.StartServers"

by

"load_at_startup_runnable_classes="

The settings should be automatically imported, except for the software clients. Currently, if you change the server/extender/client settings, you will likely need to restart SageTV for them to take effect...

The compiled file has been attached as well as an XML file (remove the .txt) to load it locally.
Attached Files
File Type: zip SageTCPServer-2.3.5.zip (76.3 KB, 361 views)
File Type: txt SageTVPluginsDev.xml.txt (2.6 KB, 395 views)
__________________
SageTCPServer (2.3.5): Open source TCP interface to the SageTV API
MLSageTV (3.1.8)/Sage Media Server (1.13): SageTV plugin for MainLobby/CQC
TaSageTV (2.58)/TaSTVRemote (1.14): Monitor/control SageTV with an Android device
TbSageTV (1.02)/STVRemote (1.11): Monitor/control SageTV with a PlayBook 2
TiSageTV (1.64)/TiSTVRemote (1.09): Monitor/control SageTV with an iPhone/iPod/iPad

Last edited by Fonceur; 12-13-2018 at 07:37 PM.
Reply With Quote
  #2  
Old 01-29-2011, 10:54 PM
Fonceur's Avatar
Fonceur Fonceur is offline
Sage Icon
 
Join Date: Jan 2008
Location: DDO, QC
Posts: 1,915
Version 1.8.9

Fix: Some parameters were not properly read from sage.properties.


I don't plan on posting about every updates, but this one is important...
__________________
SageTCPServer (2.3.5): Open source TCP interface to the SageTV API
MLSageTV (3.1.8)/Sage Media Server (1.13): SageTV plugin for MainLobby/CQC
TaSageTV (2.58)/TaSTVRemote (1.14): Monitor/control SageTV with an Android device
TbSageTV (1.02)/STVRemote (1.11): Monitor/control SageTV with a PlayBook 2
TiSageTV (1.64)/TiSTVRemote (1.09): Monitor/control SageTV with an iPhone/iPod/iPad
Reply With Quote
  #3  
Old 01-30-2011, 08:27 AM
PLUCKYHD PLUCKYHD is offline
SageTVaholic
 
Join Date: Dec 2007
Posts: 6,257
Very nice work Fonceur maybe one day I will have time to take advantage of it
Reply With Quote
  #4  
Old 01-30-2011, 12:04 PM
RandyJohnson RandyJohnson is offline
Sage Advanced User
 
Join Date: Jan 2005
Location: Wichita Kansas
Posts: 122
There appears to be a bug in the plugin handling

Prior to 1.8.8 the following parameter was in the sage configuration file:

sageTCPServer/clients=001d6a5ca886.9250,001d6a5dbda0.9251

Now I notice that the following lines are being used:

sageTCPServer/extender=9250,9251,9252,9253
sageTCPServer/server=9250


The problem that I am seeing now is that my bedroom remote (what was port 9250) is now controlling sage UI on the server and not the original extender.

Is there a fix for this problem?

I believe that you are assigning the first port to the sage "localhost" and then to the extenders alphabetically on the id.

Is there a UI to move the port numbers in the event you do not wish to use the default ports?

Thanks in advance...

Randy
__________________
Server: Intel i7-980X, Gigabyte X58, 12GB memory, 12TB for recordings, 8TB for DVD storage, headless
Software: Windows 7 64bit Ultimate (turned off UAC and firewall) - SageTV V7 7.0.23
Playbacks: (2) HD-200 Home Theater (1) HD-300 Placeshifter Mode
Tuners: (4) HDHomeRun Dual (8-clear QAM), (1) Hauppauge 1600 (analog), (4) r5000 Dishnetwork VIP 211
Sources: Wichita Kansas OTA, Cox Digital clear QAM, Cox Analog, Dishnetwork
Reply With Quote
  #5  
Old 01-30-2011, 12:08 PM
RandyJohnson RandyJohnson is offline
Sage Advanced User
 
Join Date: Jan 2005
Location: Wichita Kansas
Posts: 122
Nevermind found the configuration page

Nevermind I found the configuration page.

That is the one thing that adds some inconsistance to plugins.

Some are configurable from the plugin manager and some via the configuration manager.

Oh well... I agree with Plucky the software is nice and easy to use and solved a number of issues with my prior approach.

Randy
__________________
Server: Intel i7-980X, Gigabyte X58, 12GB memory, 12TB for recordings, 8TB for DVD storage, headless
Software: Windows 7 64bit Ultimate (turned off UAC and firewall) - SageTV V7 7.0.23
Playbacks: (2) HD-200 Home Theater (1) HD-300 Placeshifter Mode
Tuners: (4) HDHomeRun Dual (8-clear QAM), (1) Hauppauge 1600 (analog), (4) r5000 Dishnetwork VIP 211
Sources: Wichita Kansas OTA, Cox Digital clear QAM, Cox Analog, Dishnetwork
Reply With Quote
  #6  
Old 01-30-2011, 12:17 PM
Fonceur's Avatar
Fonceur Fonceur is offline
Sage Icon
 
Join Date: Jan 2008
Location: DDO, QC
Posts: 1,915
Quote:
Originally Posted by RandyJohnson View Post
sageTCPServer/extender=9250,9251,9252,9253
sageTCPServer/server=9250
Ooops, I didn't think of checking the extenders port when setting up the server side. The extender values should have included the MacID, and not sure why that duplicated stuff...
__________________
SageTCPServer (2.3.5): Open source TCP interface to the SageTV API
MLSageTV (3.1.8)/Sage Media Server (1.13): SageTV plugin for MainLobby/CQC
TaSageTV (2.58)/TaSTVRemote (1.14): Monitor/control SageTV with an Android device
TbSageTV (1.02)/STVRemote (1.11): Monitor/control SageTV with a PlayBook 2
TiSageTV (1.64)/TiSTVRemote (1.09): Monitor/control SageTV with an iPhone/iPod/iPad
Reply With Quote
  #7  
Old 01-30-2011, 12:38 PM
RandyJohnson RandyJohnson is offline
Sage Advanced User
 
Join Date: Jan 2005
Location: Wichita Kansas
Posts: 122
Well there is a problem...

You can modify the plugin parameters via the configuration manager.

But... twice I have keyed in the following for the extenders:

001d6a5ca886.9250,001d6a5dbda0.9251

Twice after I rebooted the server all that was displayed was:

9250,9251

So there is definitely a bug where the extender addresses are being stripped.

I checked the sage parameter file prior to the last reboot, and the "extenders" were setup correctly. After the reboot only 9250,9251 is showing up.

After further testing the stripping of the extender address occurs only if you attempt to edit the parameters again.

Randy
__________________
Server: Intel i7-980X, Gigabyte X58, 12GB memory, 12TB for recordings, 8TB for DVD storage, headless
Software: Windows 7 64bit Ultimate (turned off UAC and firewall) - SageTV V7 7.0.23
Playbacks: (2) HD-200 Home Theater (1) HD-300 Placeshifter Mode
Tuners: (4) HDHomeRun Dual (8-clear QAM), (1) Hauppauge 1600 (analog), (4) r5000 Dishnetwork VIP 211
Sources: Wichita Kansas OTA, Cox Digital clear QAM, Cox Analog, Dishnetwork

Last edited by RandyJohnson; 01-30-2011 at 01:04 PM.
Reply With Quote
  #8  
Old 01-30-2011, 12:48 PM
RandyJohnson RandyJohnson is offline
Sage Advanced User
 
Join Date: Jan 2005
Location: Wichita Kansas
Posts: 122
Additionally...

I also needed to remove the "server" port.

So the first time I just blanked out that parameter.

When I check sages' parameter file the port still showed 9250.

So then I changed the server port to 9260.

Then I checked sage's parameter file and the port still showed 9250.

Anyways...

I am going to see if I can manually set these parameters and see if they will hold.

Randy

The parameters hold on the reboot as long as you do not "touch" the configuration screen.
__________________
Server: Intel i7-980X, Gigabyte X58, 12GB memory, 12TB for recordings, 8TB for DVD storage, headless
Software: Windows 7 64bit Ultimate (turned off UAC and firewall) - SageTV V7 7.0.23
Playbacks: (2) HD-200 Home Theater (1) HD-300 Placeshifter Mode
Tuners: (4) HDHomeRun Dual (8-clear QAM), (1) Hauppauge 1600 (analog), (4) r5000 Dishnetwork VIP 211
Sources: Wichita Kansas OTA, Cox Digital clear QAM, Cox Analog, Dishnetwork

Last edited by RandyJohnson; 01-30-2011 at 01:05 PM. Reason: Followup
Reply With Quote
  #9  
Old 01-30-2011, 01:12 PM
Fonceur's Avatar
Fonceur Fonceur is offline
Sage Icon
 
Join Date: Jan 2008
Location: DDO, QC
Posts: 1,915
OK, try upgrading to 1.9.0, it should address those issues.
__________________
SageTCPServer (2.3.5): Open source TCP interface to the SageTV API
MLSageTV (3.1.8)/Sage Media Server (1.13): SageTV plugin for MainLobby/CQC
TaSageTV (2.58)/TaSTVRemote (1.14): Monitor/control SageTV with an Android device
TbSageTV (1.02)/STVRemote (1.11): Monitor/control SageTV with a PlayBook 2
TiSageTV (1.64)/TiSTVRemote (1.09): Monitor/control SageTV with an iPhone/iPod/iPad
Reply With Quote
  #10  
Old 02-01-2011, 06:22 AM
Jason's Avatar
Jason Jason is offline
Sage Expert
 
Join Date: Nov 2003
Location: Texas
Posts: 598
Quote:
Originally Posted by Fonceur View Post
SageTCPServer is an open source TCP interface to the SageTV API. The original project was started by Beelzerob and used by his SageTV driver for CQC. The source code is accessible through CVS at: SageTCPServer with some descriptions at http://talluscorp.com/mediawiki//ind...=SageTCPServer. Developers should consult: http://talluscorp.com/mediawiki//ind...for_developers .

Starting with version 1.8.8, the actual SageTVPlugin has been implemented, thus breaking the backward compatibility with SageTV 6.

Users of older versions should replace the line:

"load_at_startup_runnable_classes=sagetcpserver.StartServers"

by

"load_at_startup_runnable_classes="
Just FYI... Don't forget to remove the runnable_classes entries in both your server and client .properties files.

http://forums.sagetv.com/forums/show...07&postcount=9



-Jason
__________________
True standalone tuner functionality with the --> HAVA Channel Changer<--
Reply With Quote
  #11  
Old 02-01-2011, 07:01 AM
Fonceur's Avatar
Fonceur Fonceur is offline
Sage Icon
 
Join Date: Jan 2008
Location: DDO, QC
Posts: 1,915
Quote:
Originally Posted by Jason View Post
Just FYI... Don't forget to remove the runnable_classes entries in both your server and client .properties files.
While it did complain in the SageTV log before I removed mine, that did not seem to be a big problem... Do you mean that SageAlert is making a big fuss about it?

I guess I could try to automatically update that line in sage.properties, though for the sageclient.properties that would still require human intervention...
__________________
SageTCPServer (2.3.5): Open source TCP interface to the SageTV API
MLSageTV (3.1.8)/Sage Media Server (1.13): SageTV plugin for MainLobby/CQC
TaSageTV (2.58)/TaSTVRemote (1.14): Monitor/control SageTV with an Android device
TbSageTV (1.02)/STVRemote (1.11): Monitor/control SageTV with a PlayBook 2
TiSageTV (1.64)/TiSTVRemote (1.09): Monitor/control SageTV with an iPhone/iPod/iPad
Reply With Quote
  #12  
Old 02-01-2011, 07:21 PM
wayner wayner is offline
SageTVaholic
 
Join Date: Jan 2008
Location: Toronto, ON
Posts: 7,491
So now that I have bought the iPad app and installed SageTCPServer, what should I have in sage.properties. I have now gotten rid of the parameters in the load_at_startup line, but what should I have? Currently here is what I have for SageTCP:
Code:
sageTCPServer/clients=local.9250,001a6afdb847.9262
sageTCPServer/debugOn=true
sageTCPServer/server=9250
sageTCPServer/streamingTranscodeOptions=soverlay,ab\=100,samplerate\=44100,channels\=2,acodec\=mp4a,vcodec\=h264,width\=352,height\=240,vfilter\="canvas{width\=352,height\=240,aspect\=16\:9}",fps\=29,vb\=200,venc\=x264{vbv-bufsize\=500,partitions\=all,level\=12,no-cabac,subme\=7,threads\=4,ref\=2,mixed-refs\=1,bframes\=0,min-keyint\=1,keyint\=50,trellis\=2,direct\=auto,qcomp\=0.0,qpmax\=51,deinterlace}
sageTCPServer/streamingTranscodeOptions1=fps\=15,vcodec\=mp4v,vb\=512,scale\=1,width\=352,height\=240,acodec\=mp4a,ab\=192,channels\=2,samplerate\=44100,deinterlace,audio-sync
sageTCPServer/streamingTranscodeOptions2=fps\=15,vcodec\=h264,venc\=x264{no-cabac,level\=12,vbv-maxrate\=300,vbv-bufsize\=1000,keyint\=75,ref\=3,bframes\=0},width\=352,height\=240,acodec\=mp4a,ab\=64,vb\=300,samplerate\=44100,audio-sync
sageTCPServer/streamingTranscodeOptions3=fps\=29,vcodec\=mp4v,vb\=512,scale\=1,width\=352,height\=240,acodec\=mp4a,ab\=192,channels\=2,samplerate\=44100,deinterlace,audio-sync
sageTCPServer/streamingTranscodeOptions4=fps\=29,vcodec\=h264,venc\=x264{no-cabac,level\=12,vbv-maxrate\=300,vbv-bufsize\=1000,keyint\=75,ref\=3,bframes\=0},width\=352,height\=240,acodec\=mp4a,ab\=64,vb\=300,samplerate\=44100,audio-sync
sageTCPServer/streamingTranscodeOptions5=fps\=29,vcodec\=mp4v,vb\=512,scale\=1,width\=576,height\=384,acodec\=mp4a,ab\=192,channels\=2,samplerate\=44100,deinterlace,audio-sync
sageTCPServer/streamingTranscodeOptions6=fps\=29, vcodec\=h264,venc\=x264{no-cabac,level\=12,vbv-maxrate\=300,vbv-bufsize\=1000,keyint\=75,ref\=3,bframes\=0},width\=576,height\=384,acodec\=mp4a,ab\=64,vb\=300,samplerate\=44100,audio-sync
sageTCPServer/streamingVLCOptions=-I dummy --one-instance --extraintf oldhttp --sout-keep --no-sout-rtp-sap --no-sout-standard-sap --rtsp-caching\=5000 -f
sageTCPServer/streamingVLCPath=C\:/Program Files/VideoLAN/VLC/vlc.exe
sageTCPServer/streamingVLCPort=-1
sageTCPServer/streamingVLCType=rtsp
Should any of this be deleted?
__________________
New Server - Sage9 on unRAID 2xHD-PVR, HDHR for OTA
Old Server - Sage7 on Win7Pro-i660CPU with 4.6TB, HD-PVR, HDHR OTA, HVR-1850 OTA
Clients - 2xHD-300, 8xHD-200 Extenders, Client+2xPlaceshifter and a WHS which acts as a backup Sage server
Reply With Quote
  #13  
Old 02-01-2011, 07:55 PM
Fonceur's Avatar
Fonceur Fonceur is offline
Sage Icon
 
Join Date: Jan 2008
Location: DDO, QC
Posts: 1,915
Quote:
Originally Posted by wayner View Post
sageTCPServer/clients=local.9250,001a6afdb847.9262
This one shouldn't be there, the update procedure should split it out into:

sageTCPServer/extender=001a6afdb847.9262
sageTCPServer/server=9250

I see the server line, but the extender one seems to be missing... Or maybe that wasn't copied with SageTV and its service shutdown.
__________________
SageTCPServer (2.3.5): Open source TCP interface to the SageTV API
MLSageTV (3.1.8)/Sage Media Server (1.13): SageTV plugin for MainLobby/CQC
TaSageTV (2.58)/TaSTVRemote (1.14): Monitor/control SageTV with an Android device
TbSageTV (1.02)/STVRemote (1.11): Monitor/control SageTV with a PlayBook 2
TiSageTV (1.64)/TiSTVRemote (1.09): Monitor/control SageTV with an iPhone/iPod/iPad
Reply With Quote
  #14  
Old 02-01-2011, 08:36 PM
vividweb vividweb is offline
Sage Aficionado
 
Join Date: Aug 2006
Location: Calgary AB
Posts: 401
I don't think an extender can be added until has been turned on once.
__________________

Sage Server: i5-2500K 8 GB DDR, 6000gb HDD, 4xHD-PVR < 4xBell 6141, Win7 x64
Client 1: HD-200, Panasonic 42PX75
Client 2: HD-300, Samsung LCD
Client 3: HD-300, Samsung PN50C550
Client 4: MS Surface Pro
Reply With Quote
  #15  
Old 02-01-2011, 09:06 PM
Fonceur's Avatar
Fonceur Fonceur is offline
Sage Icon
 
Join Date: Jan 2008
Location: DDO, QC
Posts: 1,915
Quote:
Originally Posted by vividweb View Post
I don't think an extender can be added until has been turned on once.
It depends, if there was an old configuration, it's supposed to get updated automatically. Though there might still be issues in the current implementation.
__________________
SageTCPServer (2.3.5): Open source TCP interface to the SageTV API
MLSageTV (3.1.8)/Sage Media Server (1.13): SageTV plugin for MainLobby/CQC
TaSageTV (2.58)/TaSTVRemote (1.14): Monitor/control SageTV with an Android device
TbSageTV (1.02)/STVRemote (1.11): Monitor/control SageTV with a PlayBook 2
TiSageTV (1.64)/TiSTVRemote (1.09): Monitor/control SageTV with an iPhone/iPod/iPad
Reply With Quote
  #16  
Old 02-01-2011, 10:29 PM
RandyJohnson RandyJohnson is offline
Sage Advanced User
 
Join Date: Jan 2005
Location: Wichita Kansas
Posts: 122
It looks like there is still a problem.

If you leave the "server" field blank and upon entering the configuration manager it will insert a port number.

Is this by design or a bug?

Randy
__________________
Server: Intel i7-980X, Gigabyte X58, 12GB memory, 12TB for recordings, 8TB for DVD storage, headless
Software: Windows 7 64bit Ultimate (turned off UAC and firewall) - SageTV V7 7.0.23
Playbacks: (2) HD-200 Home Theater (1) HD-300 Placeshifter Mode
Tuners: (4) HDHomeRun Dual (8-clear QAM), (1) Hauppauge 1600 (analog), (4) r5000 Dishnetwork VIP 211
Sources: Wichita Kansas OTA, Cox Digital clear QAM, Cox Analog, Dishnetwork
Reply With Quote
  #17  
Old 02-01-2011, 10:49 PM
Fonceur's Avatar
Fonceur Fonceur is offline
Sage Icon
 
Join Date: Jan 2008
Location: DDO, QC
Posts: 1,915
It is by design. I suspect that the persons only interested in controlling the UI's will be a small fraction.
__________________
SageTCPServer (2.3.5): Open source TCP interface to the SageTV API
MLSageTV (3.1.8)/Sage Media Server (1.13): SageTV plugin for MainLobby/CQC
TaSageTV (2.58)/TaSTVRemote (1.14): Monitor/control SageTV with an Android device
TbSageTV (1.02)/STVRemote (1.11): Monitor/control SageTV with a PlayBook 2
TiSageTV (1.64)/TiSTVRemote (1.09): Monitor/control SageTV with an iPhone/iPod/iPad
Reply With Quote
  #18  
Old 02-04-2011, 10:57 AM
Fonceur's Avatar
Fonceur Fonceur is offline
Sage Icon
 
Join Date: Jan 2008
Location: DDO, QC
Posts: 1,915
This mostly affects any third-party developers that might be using this plugin... I am doing a major rewrite and will be dropping the text mode (ANS:TXT). Most stuff will still be sent as plain text like before, but you will have to decide between JSON or XML for the list of Recordings and such.

The major rewrite itself is to drop the need for multiple entry points (i.e. port 9250,9251) for simultaneous access (like say from an iPhone and an iPad). Instead you will simply have a server on port 9250 and connect any number of devices to it.
__________________
SageTCPServer (2.3.5): Open source TCP interface to the SageTV API
MLSageTV (3.1.8)/Sage Media Server (1.13): SageTV plugin for MainLobby/CQC
TaSageTV (2.58)/TaSTVRemote (1.14): Monitor/control SageTV with an Android device
TbSageTV (1.02)/STVRemote (1.11): Monitor/control SageTV with a PlayBook 2
TiSageTV (1.64)/TiSTVRemote (1.09): Monitor/control SageTV with an iPhone/iPod/iPad
Reply With Quote
  #19  
Old 02-05-2011, 08:59 AM
George M George M is offline
Sage Advanced User
 
Join Date: Feb 2009
Posts: 115
[QUOTEThe major rewrite itself is to drop the need for multiple entry points (i.e. port 9250,9251) for simultaneous access (like say from an iPhone and an iPad). Instead you will simply have a server on port 9250 and connect any number of devices to it.[/QUOTE]

Does that mean then that on the taSAgetv configuration, the port should be the same for the server and the client? i.e.
Previously was Server:9250, Client:9260. Should that now be Server:9250, Client:9250?
__________________
Thanks
GM
Reply With Quote
  #20  
Old 02-05-2011, 09:17 AM
Fonceur's Avatar
Fonceur Fonceur is offline
Sage Icon
 
Join Date: Jan 2008
Location: DDO, QC
Posts: 1,915
Quote:
Originally Posted by George M View Post
Does that mean then that on the taSAgetv configuration, the port should be the same for the server and the client? i.e. Previously was Server:9250, Client:9260. Should that now be Server:9250, Client:9250?
No, it means that if you have 2 Android devices, both could be connected simultaneously to the pair 9250/9260, while currently one would connect to 9250/9260 and the other could connect to 9251/9261.

BTW, that change is not live yet, it will only be in SageTCPServer 1.9.1+.
__________________
SageTCPServer (2.3.5): Open source TCP interface to the SageTV API
MLSageTV (3.1.8)/Sage Media Server (1.13): SageTV plugin for MainLobby/CQC
TaSageTV (2.58)/TaSTVRemote (1.14): Monitor/control SageTV with an Android device
TbSageTV (1.02)/STVRemote (1.11): Monitor/control SageTV with a PlayBook 2
TiSageTV (1.64)/TiSTVRemote (1.09): Monitor/control SageTV with an iPhone/iPod/iPad
Reply With Quote
Reply

Tags
cqc, mainlobby, tasagetv, tisagetv


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Plugin: MizookLCD (Alternate SageTV LCDSmartie Plugin) cslatt SageTV Customizations 48 06-11-2012 10:44 AM
MediaPlayer Plugin/STV Import: Winamp Media Player Plugin deria SageTV Customizations 447 12-11-2010 07:38 PM
SageTCPServer -- chan up / chan down doesn't work Spartan SageTV Customizations 5 09-30-2010 09:31 AM
SageTCPServer -- configuration problems... Spartan SageTV Customizations 3 09-07-2010 12:59 PM
SageTCPServer - @Fonceur Osler SageTV Customizations 12 07-12-2010 09:02 PM


All times are GMT -6. The time now is 01:19 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2023, vBulletin Solutions Inc.
Copyright 2003-2005 SageTV, LLC. All rights reserved.